lis中每个键的最大值

2024-03-29 01:12:04 发布

您现在位置:Python中文网/ 问答频道 /正文

给出:

scooby = [1, 4, 1, 4, 1, 4, 1, 1, 4]
snacks = [6,28,14, 3, 9, 8,18, 6, 7]
scoobysnacks = zip(scooby,snacks)

如何运行max(scoobysnacks)获取:

(1,18)
(4,28)

逻辑是,18是与a1相关的最大值,28是与a4相关的最大值。你知道吗


Tags: a1逻辑zipmaxa4scoobysnacksscoobysnacks
2条回答
list(dict(sorted(zip(scooby, snacks))).items())

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

糟糕的O(n)中的一行

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

这里有一个只遍历列表一次的解决方案,用dict跟踪最佳对。你知道吗

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

相关问题 更多 >