我有一个列表列表list = [(1,2,5), (2,8,7),(3,6,9)]
,我想找到第三列的最大数量,所以我试过了:
zipped = zip(*list)
print max(zipped[2])
但它没有显示最大的数字。有谁知道原因和解决方案?
答案 0 :(得分:7)
适用于所有较新的蟒蛇:
>>> li = [(1,2,5), (2,8,7),(3,6,9)]
>>> max(l[2] for l in li)
9
如果您有文字:
>>> li = [('1','2','5'), ('2','8','7'),('3','6','9')]
>>> max(int(l[2]) for l in li)
9
即使源是迭代器/生成器也能工作。这是在Py3.3上,其中zip返回一个迭代器:
>>> gli=(e for e in li)
>>> max(int(l[2]) for l in gli)
9
>>> max(int(l[2]) for l in zip(*li))
9
答案 1 :(得分:4)
在python2.7上为我工作。
>>> l = [(1,2,5),(2,8,7),(3,6,9)]
>>> zip(*l)
[(1, 2, 3), (2, 8, 6), (5, 7, 9)]
>>> max(zip(*l)[2])
9
另一种选择:
max(l,key=lambda x:x[2])[2]
或者您更喜欢itemgetter
:
from operator import itemgetter
max(l,key=itemgetter(2))[2]
这在内存方面可能更有效,它可以在python3.x上运行,其中zip
不再返回list
。
这里的关键是,它允许你获得最大的完整元组(由第3个元素决定的最大元组),然后你可以根据需要从中拉出正确的元素。