搜索列表列表中最大的一列

时间:2013-02-14 21:19:09

标签: python list max

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

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

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

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个元素决定的最大元组),然后你可以根据需要从中拉出正确的元素。