在列表中查找某列的最大值
我有一个列表,里面包含了多个小列表,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