Как извлечь n-й элемент, равный значению, из списка кортежей в Python - PullRequest
0 голосов
/ 14 мая 2018

Я пытаюсь получить n-й элемент из списка кортежей в Python, равного определенному значению

У меня есть намного больший список чего-то вроде этого

num = [('A15', 2, 'BC', 721.16), ('A21', 3, 'AB', 631.31), ('A42', 4, 'EE', 245.43)]

Я хочу извлечь только кортежи с 2-м элементом кортежа, равным заданному значению, т.е. 2 в этом примере, и из них найти самый большой 4-й элемент

В настоящее время мой код выглядит следующим образом

for ((x[1] for x in num) = 1):
    num_max = max(num_list,key=lambda item:item[3])

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

Извинения, если на этот вопрос уже был дан ответ, но я не смог его найти

Ответы [ 2 ]

0 голосов
/ 14 мая 2018

Попробуйте вот так,

In [1]: num = [('A15', 2, 'BC', 721.16), ('A21', 3, 'AB', 631.31), 
               ('A42', 4, 'EE', 245.43),('A15', 2, 'BC', 856.16)]
In [2]: max((i for i in num if i[1] == 2),key=lambda  x:x[3])
Out[2]: ('A15', 2, 'BC', 856.16)
0 голосов
/ 14 мая 2018

У вас есть несколько вариантов, используя filter и max, например:

result =  max(filter(lambda x: x[1] == 2, num_list), key=lambda x: x[3])

Как прокомментировал @chrisz, но вместо list используйте generator:

result = max((i for i in x if i[1] == 2), key=lambda x: x[3])

Примечание. При использовании python2 рассмотрите возможность использования itertools.ifilter вместо filter, чтобы избежать дополнительной памяти.

...