使用Python查找元组对的最小值

82 投票
4 回答
87156 浏览
提问于 2025-04-17 15:26

我想要找到一个包含元组的列表中,按照某一列排序后的最小值。比如,我有一些数据是以2个元素的元组形式排列的。

data = [ (1, 7.57), (2, 2.1), (3, 1.2), (4, 2.1), (5, 0.01), 
         (6, 0.5), (7, 0.2), (8, 0.6)]

我该如何仅通过比较元组中的第二个数字来找到数据集的最小值呢?

也就是说,

data[0][1] = 7.57
data[1][1] = 2.1

min( data ) = (5, 0.01)

min( data ) 返回的是 (1, 7.57),我知道这对于索引0的最小值是正确的,但我想要的是索引1的最小值。

4 个回答

7

虽然Lev的回答是正确的,但我想补充一下排序方法,以防有人对前n个最小值感兴趣。需要考虑的一点是,min操作的运行时间是O(N),而排序的运行时间是O(N Log N)

data = [ (1, 7.57), (2, 2.1), (3, 1.2), (4, 2.1), (5, 0.01), (6, 0.5), (7, 0.2), (8, 0.6)]
data.sort(key=lambda x:x[1])
print data

>>> [(5, 0.01), (7, 0.2), (6, 0.5), (8, 0.6), (3, 1.2), (2, 2.1), (4, 2.1), (1, 7.57)]

https://www.ics.uci.edu/~pattis/ICS-33/lectures/complexitypython.txt

151
In [2]: min(data, key = lambda t: t[1])
Out[2]: (5, 0.01)

或者:

In [3]: import operator

In [4]: min(data, key=operator.itemgetter(1))
Out[4]: (5, 0.01)
1
min_tuple = min([(y, x) for x, y in data])[::-1]

这段代码会把所有的成对数据反转,使用 min() 函数时也和正常一样(先比较新的第一个数字,再比较第二个),最后再把得到的结果重新调整回原来的格式。

撰写回答