3

我有一个列表,list = [(1,2,5), (2,8,7),(3,6,9)]我想找到第三列的最大数字,所以我尝试了:

zipped = zip(*list)
print max(zipped[2])

但它没有显示最大的数字。有谁知道为什么和解决方案?

4

2 回答 2

12

适用于所有较新的 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
于 2013-02-14T21:26:27.450 回答
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]

zip这在内存方面可能更有效,它将在不再返回 a 的python3.x 上工作list

这里的关键是它允许您获取最大的完整元组(最大的由第三个元素确定),然后如果需要,您只需从那里拉出正确的元素。

于 2013-02-14T21:20:34.910 回答