我有一个列表,list = [(1,2,5), (2,8,7),(3,6,9)]
我想找到第三列的最大数字,所以我尝试了:
zipped = zip(*list)
print max(zipped[2])
但它没有显示最大的数字。有谁知道为什么和解决方案?
适用于所有较新的 Python:
>>> 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
在 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]
zip
这在内存方面可能更有效,它将在不再返回 a 的python3.x 上工作list
。
这里的关键是它允许您获取最大的完整元组(最大的由第三个元素确定),然后如果需要,您只需从那里拉出正确的元素。