Python:在元组列表中查找最小值,最大值

use*_*144 27 python graphics list

alist = [(1,3),(2,5),(2,4),(7,5)]
Run Code Online (Sandbox Code Playgroud)

我需要获取元组中每个位置的最小值.

福克斯的例子:alist的预期输出是

min_x = 1
max_x = 7

min_y = 3
max_y = 5
Run Code Online (Sandbox Code Playgroud)

有什么简单的方法吗?

cob*_*bal 61

map(max, zip(*alist))
Run Code Online (Sandbox Code Playgroud)

首先解压缩您的列表,然后找到每个元组位置的最大值

>>> alist = [(1,3),(2,5),(2,4),(7,5)]
>>> zip(*alist)
[(1, 2, 2, 7), (3, 5, 4, 5)]
>>> map(max, zip(*alist))
[7, 5]
>>> map(min, zip(*alist))
[1, 3]
Run Code Online (Sandbox Code Playgroud)

这也适用于列表中任何长度的元组.

  • @Andrew当然,`*`将列表拼接到函数的参数中.理解这一点的最好方法是举例:`f(*[1,2,3])`与`f(1,2,3)`完全相同,所以`zip(*[(1,3)) ,(2,5),(2,4),(7,5)])`与`zip((1,3),(2,5),(2,4),(7,5)相同))`返回`[(1,2,2,7),(3,5,4,5)]`.有关完整,详尽的详细信息,请参阅[文档](http://docs.python.org/2/reference/expressions.html#calls) (5认同)
  • 说到[文档](http://docs.python.org/2/library/functions.html#map)中的血腥细节,请参阅tiwo的[答案](http://stackoverflow.com/a/ 8303138/355230) - 这真的应该在这里发表评论 - 关于不需要`zip`调用,只需要使用`map(max,*alist)`和`map(min,*alist)`. (3认同)

Joh*_*ooy 8

>>> from operator import itemgetter
>>> alist = [(1,3),(2,5),(2,4),(7,5)]
>>> min(alist)[0], max(alist)[0]
(1, 7)
>>> min(alist, key=itemgetter(1))[1], max(alist, key=itemgetter(1))[1]
(3, 5)
Run Code Online (Sandbox Code Playgroud)