max в списке кортежей (Python) - PullRequest
2 голосов
/ 19 марта 2020

У меня есть список списков кортежей

var1 = [
    [(10, '♣'), (7, '♠')],
    [(14, '♣'), (2, '♣')],
    [(2, '♥'), (9, '♦')],
    [(11, '♠'), (10, '♠')],
    [(11, '♦'), (5, '♣')]
]

, и я хочу извлечь кортеж со значением maximun, которое является вторым, или var1 [1]. Я использовал много разных кодов во время моего программирования, но тот, который я использую сейчас и до сих пор, и у него не было никаких серьезных проблем, это:

 maximo = max(var1, key=lambda x: sum(i for i,_ in x))

также этот:

 maximo2 = list(map(max,zip(*var1)))

Проблема в том, что мне нужен список с наибольшим значением, а не список с комбинациями двух самых больших, и сейчас этот код выводит var1[3] как большее из двух, и я не не знаю, что еще попробовать.

Ответы [ 3 ]

5 голосов
/ 19 марта 2020

Используйте max вместо sum

Пример:

var1=[[(10, '♣'), (7, '♠')], [(14, '♣'), (2, '♣')], [(2, '♥'), (9, '♦')], [(11, '♠'), (10, '♠')], [(11, '♦'), (5, '♣')]]
maximo=max(var1, key=lambda x: max(i for i,_ in x))
print(maximo)

Выход:

[(14, '♣'), (2, '♣')]
1 голос
/ 19 марта 2020

Вы можете использовать встроенную функцию max с параметром key:

max(var1, key=max)

, вывод:

[(14, '♣'), (2, '♣')]
0 голосов
/ 19 марта 2020

Вы также можете использовать max и operator.itemgetter здесь:

>>> from operator import itemgetter
>>> var1=[[(10, '♣'), (7, '♠')], [(14, '♣'), (2, '♣')], [(2, '♥'), (9, '♦')], [(11, '♠'), (10, '♠')], [(11, '♦'), (5, '♣')]]
>>> max(var1, key=itemgetter(0))
[(14, '♣'), (2, '♣')]
...