Cómo encontrar k números más grandes de una lista de n números asumiendo que n> k

Estoy buscando algún código en Python que pueda devolver k números más grandes de una lista no clasificada de n números. Primero pensé en hacer esto ordenando primero la lista, pero esto podría resultar muy voluminoso.

Por ejemplo, la lista de la que quiero encontrar k número más grande es la list1

 > list1 = [0.5, 0.7, 0.3, 0.3, 0.3, 0.4, 0.5] 

Aquí n = 7 y si k = 3 , es decir, si quiero encontrar los 3 números más grandes de una lista de 7 números, la salida debería ser 0.5, 0.7, 0.5

¿Cómo se puede hacer esto?

Python tiene todas las baterías incluidas – usa el módulo heapq 🙂

 from heapq import nlargest data = [0.5, 0.7, 0.3, 0.3, 0.3, 0.4, 0.5] print nlargest(3, data) 

también es más rápido que la clasificación de toda la matriz, ya que está utilizando una comstackción parcial

Se puede hacer así:

 >>> list1 [0.5, 0.7, 0.3, 0.3, 0.3, 0.4, 0.5] >>> list2 = list1[:] #make a copy of list1 >>> k = 3 >>> result = [] >>> for i in range(k): result.append(max(list2)) #append largest element to list of results list2.remove(max(list2)) # remove largest element from old list >>> result [0.7, 0.5, 0.5] >>> 

Suponiendo que no desea modificar la list1 , realiza una copia ordenada :

 In [1]: list1 = [0.5, 0.7, 0.3, 0.3, 0.3, 0.4, 0.5] In [2]: list2 = sorted(list1) In [3]: list2 Out[3]: [0.3, 0.3, 0.3, 0.4, 0.5, 0.5, 0.7] 

En la lista 2, los números más grandes son los últimos números, por lo que usaremos la segmentación :

 In [4]: list2[-3:] Out[4]: [0.5, 0.5, 0.7] 

Los enlaces que he añadido apuntan a la documentación de Pythons. Como principiante, debes comenzar por echar un vistazo al tutorial . Después de eso, la referencia de la biblioteca es lo que más necesitarás, porque la biblioteca estándar grande es una de las cosas que hacen que Python sea tan agradable.