Vraag Tupelparen, waarbij minimaal gebruik wordt gemaakt van python


Ik wil het minimum van een lijst met tuples sorteren op een gegeven kolom vinden. Ik heb een aantal gegevens gerangschikt als een lijst van 2-tuples bijvoorbeeld.

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)]

Hoe kan ik de min van de dataset vinden door alleen het tweede nummer in de tuples te vergelijken?

d.w.z.

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

min (data) = (5, 0.01)

min( data ) komt terug (1, 7.57), wat ik accepteer is correct voor het minimum van index 0, maar ik wil minimum van index 1.


30
2018-02-10 20:13


oorsprong


antwoorden:


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

of:

In [3]: import operator

In [4]: min(data, key=operator.itemgetter(1))
Out[4]: (5, 0.01)

55
2018-02-10 20:21



Hoewel het antwoord van Lev correct is, wilde ik ook de sorteermethode toevoegen, voor het geval iemand geïnteresseerd is in de eerste n  Minimas. Een ding om te overwegen is dat de min de runtime van de bewerking is O(N) waar de soort is 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


1
2018-06-27 22:42



Als je bereid bent om de numpy coolaid te drinken, kun je deze opdrachten gebruiken om het tuple in de lijst te krijgen waar het item minimaal is:

De ingrediënten die dit werk maken zijn numpy's geavanceerde array-slicing- en argsort-functies.

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],:])

Welke prints:

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]

0
2017-09-24 02:19