Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/heroku/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 列表中每个键的最大值_Python - Fatal编程技术网

Python 列表中每个键的最大值

Python 列表中每个键的最大值,python,Python,鉴于: 如何运行max(scoobysnacks)以获得: scooby = [1, 4, 1, 4, 1, 4, 1, 1, 4] snacks = [6,28,14, 3, 9, 8,18, 6, 7] scoobysnacks = zip(scooby,snacks) 逻辑是18是与1关联的最大值,28是与4关联的最大值 糟糕的O(n)中的一个衬垫 这是一个只遍历列表一次的解决方案,使用dict跟踪最佳对 [ (k, max(v)) for k, v in (lamb

鉴于:

如何运行
max(scoobysnacks)
以获得:

scooby = [1, 4, 1, 4, 1, 4, 1, 1, 4]
snacks = [6,28,14, 3, 9, 8,18, 6, 7]
scoobysnacks = zip(scooby,snacks)
逻辑是18是与1关联的最大值,28是与4关联的最大值


糟糕的O(n)中的一个衬垫
这是一个只遍历列表一次的解决方案,使用
dict
跟踪最佳对

[
    (k, max(v)) for k, v in 
    (lambda d, x=defaultdict(list): ([x[k].append(v) for k, v in d], x))
    (zip(scooby, snacks))[1].items()
]

输出背后的逻辑是什么?欢迎来到SO。请花时间阅读该页面上的其他链接。花点时间练习这些示例,它会让您了解Python可以帮助您解决问题的工具。严格来说,您不会,因为这不是
max
所做的。哦,我明白了!下面是您想要的:
scoobysnacks=list(zip(scooby,零食));打印([(x,max(j表示i,j表示史酷比,如果i==x)),用于设置中的x(史酷比)]
使用pandas,
将pandas导入为pd
pd.DataFrame({'scooby':scooby,'Snakts':Snakts}).groupby('scooby',as_index=False)['Snakts'].max().apply(tuple,1).tolist()
我不知道你可以在max函数中枚举并嵌入一个“if”。。。好极了我在哪里可以学到更多?另外,如果列表是按scooby排序的,函数将如何更改?scooby=[1,1,1,1,4,4,4]零食=[6,14,9,18,6,28,3,8,7]使用
zip(scooby,零食)
而不是
enumerate
,可能会更简单。第二种解决方案更好。也可以选择一个
defaultdict
。@miradulo只有当我们知道值是positive@OlivierMelançon True,我的一个假设:)取决于您是否进一步推动默认工厂。
list(dict(sorted(zip(scooby, snacks))).items())

[(1, 18), (4, 28)]
[
    (k, max(v)) for k, v in 
    (lambda d, x=defaultdict(list): ([x[k].append(v) for k, v in d], x))
    (zip(scooby, snacks))[1].items()
]
scooby = [1, 4, 1, 4, 1, 4, 1, 1, 4]
snacks = [6,28,14, 3, 9, 8,18, 6, 7]

pairs= {}
for x, y in zip(scooby, snacks):
    pairs[x] = max(pairs.get(x, y), y)

output = list(pairs.items())

output  # [(1, 18), (4, 28)]