74

我想找到按给定列排序的元组列表的最小值。例如,我将一些数据排列为 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)]

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

IE

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

分钟(数据)=(5, 0.01)

min( data )return (1, 7.57),我接受对于索引 0 的最小值是正确的,但我想要索引 1 的最小值。

4

3 回答 3

129
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)
于 2013-02-10T20:21:50.470 回答
7

使用 numpy,您可以使用这些命令来获取列表中项最小的元组:

使这项工作的成分是 numpy 的高级数组切片和 argsort 功能。

import numpy as np
#create a python list of tuples and convert it to a numpy ndarray of floats
data = np.array([ (1, 7.57), (2, 2.1), (3, 1.2), 
                  (4, 2.1), (5, 0.01), (6, 0.5), (7, 0.2), (8, 0.6)])

print("data is")
print(data)

#Generate sortIndices from second column
sortIndices = np.argsort(data[:,1])

print("sortIndices using index 1 is:" )
print(sortIndices)
print("The column at index 1 is:")
print(data[:,1])
print("Index 1 put into order using column 1")
print(data[sortIndices,1])
print("The tuples put into order using column 1")
print(data[sortIndices,:])
print("The tuple with minimum value at index 1")
print(data[sortIndices[0],:])
print("The tuple with maximum value at index 1")
print(data[sortIndices[-1],:])

哪个打印:

data is
[[ 1.    7.57]
 [ 2.    2.1 ]
 [ 3.    1.2 ]
 [ 4.    2.1 ]
 [ 5.    0.01]
 [ 6.    0.5 ]
 [ 7.    0.2 ]
 [ 8.    0.6 ]]

sortIndices using index 1 is:
[4 6 5 7 2 1 3 0]

The column at index 1 is:
[ 7.57  2.1   1.2   2.1   0.01  0.5   0.2   0.6 ]

Index 1 put into order using column 1
[ 0.01  0.2   0.5   0.6   1.2   2.1   2.1   7.57]

The tuples put into order using column 1
[[ 5.    0.01]
 [ 7.    0.2 ]
 [ 6.    0.5 ]
 [ 8.    0.6 ]
 [ 3.    1.2 ]
 [ 2.    2.1 ]
 [ 4.    2.1 ]
 [ 1.    7.57]]

The tuple with minimum value at index 1
[ 5.    0.01]

The tuple with maximum value at index 1
[ 1.    7.57]
于 2017-09-24T02:19:24.320 回答
6

即使列夫的回答是正确的,我也想添加排序方法,以防有人对第一个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

于 2017-06-27T22:42:48.110 回答