139 votes

Comment trouver la valeur maximale dans une liste de tuples ?

J'ai une liste avec ~10^6 tuples comme ceci :

[(101, 153), (255, 827), (361, 961), ...]
  ^     ^
  X     Y

Je veux trouver la valeur maximale de la Y dans cette liste, mais veulent également connaître les X auquel il est lié.

Comment dois-je m'y prendre ?

236voto

Ashwini Chaudhary Points 94431

Utilisez max() :

 
Utilisation de itemgetter() :

In [53]: lis=[(101, 153), (255, 827), (361, 961)]

In [81]: from operator import itemgetter

In [82]: max(lis,key=itemgetter(1))[0]    #faster solution
Out[82]: 361

en utilisant lambda :

In [54]: max(lis,key=lambda item:item[1])
Out[54]: (361, 961)

In [55]: max(lis,key=lambda item:item[1])[0]
Out[55]: 361

timeit comparaison :

In [30]: %timeit max(lis,key=itemgetter(1))
1000 loops, best of 3: 232 us per loop

In [31]: %timeit max(lis,key=lambda item:item[1])
1000 loops, best of 3: 556 us per loop

14voto

Burhan Khalid Points 50578

En plus du maximum, vous pouvez également effectuer un tri :

>>> lis
[(101, 153), (255, 827), (361, 961)]
>>> sorted(lis,key=lambda x: x[1], reverse=True)[0]
(361, 961)

2voto

CoffeeRain Points 1838

Vous pourriez parcourir la liste en boucle et conserver le tuple dans une variable, ce qui vous permettrait de voir les deux valeurs dans la même variable...

num=(0, 0)
for item in tuplelist:
  if item[1]>num[1]:
    num=item #num has the whole tuple with the highest y value and its x value

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X