2013-02-14 86 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