使用Python查找元组对的最小值
我想要找到一个包含元组的列表中,按照某一列排序后的最小值。比如,我有一些数据是以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()
函数时也和正常一样(先比较新的第一个数字,再比较第二个),最后再把得到的结果重新调整回原来的格式。