Python 搜索列表中一列的最大数字
我有一个列表,Python 搜索列表中一列的最大数字,python,list,max,Python,List,Max,我有一个列表,list=[(1,2,5),(2,8,7),(3,6,9)],我想找到第三列的最大数字,所以我尝试: zipped = zip(*list) print max(zipped[2]) 但它并没有显示最大的数字。有人知道原因和解决方案吗?在python2.7上对我有效 >>> l = [(1,2,5),(2,8,7),(3,6,9)] >>> zip(*l) [(1, 2, 3), (2, 8, 6), (5, 7, 9)] >>&g
list=[(1,2,5),(2,8,7),(3,6,9)]
,我想找到第三列的最大数字,所以我尝试:
zipped = zip(*list)
print max(zipped[2])
但它并没有显示最大的数字。有人知道原因和解决方案吗?在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
这里的关键是,它允许您获取最大的完整元组(最大值由第三个元素决定),然后如果需要,您只需从中提取正确的元素。适用于所有较新的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
它显示了什么?这是一个元组列表,需要澄清。。。不要给你的列表命名
list
,否则当你键入list((1,2,3))
时你会感到困惑。唯一不起作用的机会是你在Py3k上,zip是一个迭代器。你不能改变这样的问题。创造another@trivial--我回滚了您的编辑。不要这样改变问题。如果你有一个新问题,问一个新问题(但先做一点研究:)也许OP使用的是Py3k,zip返回一个iterator@JBernardo--是的。我也想到了这个。。。这就是为什么我添加了我的第二个版本也适用于python3.x。对不起,我找到了原因,我的列表是一个文本列表,我给出的示例是一个数字列表…你能告诉我如何更改它吗?@triple--map(int,iterable\u of\u string)
将返回一个新列表,其中字符串转换为整数(如果可能)哇。。。我不知道我为什么不这样写。。。(+1) ... 我可以安慰自己,它很好地允许OP获得最大的第三项的完整元组。。。但是如果你只是需要这个东西,这绝对是干净的。谢谢你的帮助,它很管用。