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)]