read - tuple python 3
Pares de tuplas, encontrar el mÃnimo usando Python (3)
Quiero encontrar el mínimo de una lista de tuplas clasificadas por una columna determinada. Tengo algunos datos organizados como una lista de 2-tuplas, por ejemplo.
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)]
¿Cómo puedo encontrar el mínimo del conjunto de datos mediante la comparación del segundo número en las tuplas solamente?
es decir
data[0][1] = 7.57
data[1][1] = 2.1
min (datos) = (5, 0.01)
devuelve min( data )
(1, 7.57)
, que acepto es correcto para el mínimo de índice 0, pero quiero un mínimo de índice 1.
Si está dispuesto a beber el coolaid nulípara, puede usar estos comandos para obtener la tupla en la lista donde el artículo es mínimo:
Los ingredientes que hacen que esto funcione son las funciones avanzadas de corte y argsort de Numpy.
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],:])
Que impresiones:
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]
Aunque la respuesta de Lev es correcta, también quería agregar el Método de clasificación, en caso de que alguien estuviera interesado en las primeras n
mínimas. Una cosa a considerar es que el tiempo de ejecución de la operación min
es O(N)
donde el tipo es 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
In [2]: min(data, key = lambda t: t[1])
Out[2]: (5, 0.01)
o:
In [3]: import operator
In [4]: min(data, key=operator.itemgetter(1))
Out[4]: (5, 0.01)