2013-06-27 1 views
0

Скажем, у меня есть список кортежей, как следующее:Могу ли я вернуть список ВСЕХ кортежей, используя функцию Python Min?

listo = [('a','1'),('b','0'),('c','2'),('d','0')] 

Если я хочу наименьшую кортеж, на основе второго индекса каждого кортежа, я могу настроить функцию мин с lambda функции, как это :

min(listo, key=lambda x: x[1]) 

Как можно заметить, этот код будет возвращать:

In [31]: min(listo, key=lambda x: x[1]) 
Out[31]: ('b', '0') 

Но это только дает мне один кортеж, и только первый один он сталкивается с этим. Что, если бы я хотел ВСЕ min кортежей? Поэтому он возвращает что-то вроде:

In [31]: min(listo, key=lambda x: x[1]) 
Out[31]: [('b', '0'),('d','0')] 

Любые советы о том, как это сделать?

ответ

1

Вы можете сделать это, сначала выполнив поиск по минимальному значению, а затем ищите другие, основанные на найденном минимальном значении.

listo = [('a','1'),('b','0'),('c','2'),('d','0')] 
minValue = min(listo, key=lambda x: x[1])[1] 
minValueList = [x for x in listo if x[1] == minValue] 

Другой подход может сделать свою собственную минимальную функцию, которая использует какое-то список минимальных значений, но, вероятно, было бы гораздо медленнее, для больших проблем.

+0

Ничего особенного, я уже делал второй подход, но искал более «питонический» способ. Мне это нравится, спасибо. – Houdini