假设:
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 是与 1 相关联的最大值, 28 与 4 <相关联的最大值< / em>的
答案 0 :(得分:4)
这是一个仅遍历列表一次的解决方案,使用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)]
答案 1 :(得分:1)
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()
]