2013-02-14 2 views
0

У меня есть список из списка, list = [(1,2,5), (2,8,7),(3,6,9)], и я хочу, чтобы найти самое большое количество третьего столбца, поэтому я стараюсьпоиск наибольшего количества одного столбца в списке список питона

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

но не показывает самого большого числа, кто-нибудь знает, почему и какое-либо решение?

+3

Что это значит вместо этого? – thegrinner

+1

Это список кортежей, которые должны быть ясны ... И не называйте свой список 'list', иначе вы будете путать, когда вы наберете' list ((1,2,3)) ' –

+0

Единственный шанс для этого не работать что вы на Py3k и zip - итератор. – JBernardo

ответ

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

+0

Спасибо за вашу помощь, она работает. – trivial

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

+0

@JBernardo - Да. Я просто подумал об этом ... Вот почему я добавил, что моя вторая версия будет работать и на python3.x. – mgilson

+0

извините, я нашел причину, мой список - это список текста, а пример, который я даю, - это список чисел ... не могли бы вы рассказать мне, как его изменить? – trivial