2013-02-14 83 views
0

我有名单,list = [(1,2,5), (2,8,7),(3,6,9)]的名单,我想找到第三列的最大数,所以我尽量搜索一列的最大数量列表蟒蛇名单

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

但不显示最大数量,任何人都知道为什么和任何解决方案?

+3

它代表什么? – thegrinner 2013-02-14 21:21:17

+1

这是要清除的元组清单...并且不要将您的列表命名为'list',否则当您输入list((1,2,3))时,您会感到困惑' – 2013-02-14 21:22:33

+0

唯一不能工作的机会是你在Py3k上,zip是一个迭代器。 – JBernardo 2013-02-14 21:23:46

回答

6
上的所有新的蟒蛇

作品:

>>> 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 
+0

哇...我不知道为什么我没有这样写...( +1)......我可以安慰自己,它很好地允许OP获得最大的第三项物品的全部元组......但如果你只需要物品,这绝对是更清洁。 – mgilson 2013-02-14 21:28:07

+0

感谢您的帮助,它的工作原理。 – trivial 2013-02-14 23:22:31

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

这里的关键是它可以让你得到最大的完整元组(最大的由第三个元素决定),然后如果你想要的话就把正确的元素从那里拉出来。

+0

也许OP的使用Py3k和zip返回一个迭代器 – JBernardo 2013-02-14 21:24:19

+0

@JBernardo - 是的。我只是想到了这一点......这就是为什么我补充说我的第二个版本也可以在python3.x上运行。 – mgilson 2013-02-14 21:24:57

+0

对不起,我找到原因,我的列表是一个文本列表,我给的例子是一个数字列表...你能告诉我如何改变它吗? – trivial 2013-02-14 21:27:47