Получение максимального значения кортежа элемента в списке кортежей - PullRequest
0 голосов
/ 24 октября 2018

У меня есть этот код:

vals = [(1,3,5),(2,2,5),(1,2,6)]
max(vals ,key=itemgetter(1))[2]

Мой вопрос: почему он возвращает 5 вместо 6?Мне нужно максимальное значение последнего элемента.Если я беру max(...)[0], это дает 2, если я беру max(...)[1], это дает 3, но если я беру max(...)[2], это дает 5. Почему это?

Ответы [ 5 ]

0 голосов
/ 24 октября 2018

Если я передаю индекс , я делаю это:

vals = [(1,3,5),(2,2,5),(1,2,6)]
max(vals[2])
#> 6
0 голосов
/ 24 октября 2018

Если вам нужен последний элемент, просто скажите это, используя индекс -1 в вашем коде.В вашем коде 1 выбирает второй элемент каждого кортежа для сравнения в max, а 2 излишне жестко кодирует знание, что ваши кортежи имеют длину три.

>>> vals = [(1,3,5),(2,2,5),(1,2,6)]
>>> max(vals, key=itemgetter(-1))[-1]
>>> 6
0 голосов
/ 24 октября 2018

x[2] - это 3 элемента кортежа, для которых должен быть рассчитан максимум, а [2] - третий элемент максимального кортежа, рассчитанный

max(vals ,key=lambda x:x[2])[2]

или

max(vals ,key=itemgetter(2))[2] # you were using itemgetter(1) which would be second element of the tuple
0 голосов
/ 24 октября 2018

При вводе с помощью itemgetter(1) вы просите Python взять максимальный кортеж на основе значений 1-го элемента .(1,3,5) имеет самый большой элемент в 1-м индексе (то есть 3).Затем вы получаете доступ ко 2-му индексу из этого кортежа (т. Е. 5).

Чтобы получить максимальное значение последнего элемента, используйте вместо этого:

>>> max([c for a,b,c in vals])
6
0 голосов
/ 24 октября 2018

key=itemgetter(1) означает, что max проверяет второй элемент tuple, чтобы определить, какой tuple является максимальным кортежем.

Таким образом, он выбирает первыйкортеж, так как 3 выше 2, затем вы выбираете последнее значение и получаете 5

Если вы хотите 6, я думаю, вы могли бы сделать max(vals ,key=itemgetter(2))[2]

Но вы также можете получить значения индекса 2 и выполнить максимум следующим образом:

max(map(itemgetter(2),vals))

, так как вы отбрасываете другие значения

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...