在Python中查找元组列表中的最大值

Ber*_*lcı 77 python tuples list

可能重复:
按嵌套列表中的第二个元素排序或查找最大值.蟒蛇

我有一个包含~10 ^ 6个元组的列表,如下所示:

[(101, 153), (255, 827), (361, 961), ...]
  ^     ^
  X     Y
Run Code Online (Sandbox Code Playgroud)

我想在这个列表中找到Ys的最大值,但也想知道它绑定的X.

我该怎么做呢?

Ash*_*ary 146

用途max():

 
使用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
Run Code Online (Sandbox Code Playgroud)

使用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
Run Code Online (Sandbox Code Playgroud)

timeit 比较:

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
Run Code Online (Sandbox Code Playgroud)

  • (+1)在这种情况下`operator.itemgetter(1)`会比lambda工作得更好,因为lambda将为10**6次中的每一次创建. (5认同)

Bur*_*lid 7

除了max,你还可以排序:

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

  • 不是排序 ~O(n log n) 并找到最大 O(n) 吗?- 最好直接找最大值 (6认同)