在列表中查找某列的最大值

3 投票
2 回答
9725 浏览
提问于 2025-04-17 15:55

我有一个列表,里面包含了多个小列表,list = [(1,2,5), (2,8,7),(3,6,9)],我想找出第三列中最大的数字,所以我试着这样做:

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

但是它没有显示出最大的数字。有没有人知道为什么会这样,以及怎么解决这个问题?

2 个回答

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

这里的关键是,它可以让你找到最大的元组(最大是根据第三个元素来判断的),然后如果你需要的话,就可以从中提取出正确的元素。

13

适用于所有较新的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

即使数据来源是一个迭代器或生成器,这段代码也能正常工作。这是在Python 3.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

撰写回答