Buscar..


Artículos más grandes y más pequeños en una colección.

Para encontrar los elementos más grandes en una colección, el módulo heapq tiene una función llamada nlargest , le pasamos dos argumentos, el primero es el número de elementos que queremos recuperar, el segundo es el nombre de la colección:

import heapq


numbers = [1, 4, 2, 100, 20, 50, 32, 200, 150, 8]
print(heapq.nlargest(4, numbers))  # [200, 150, 100, 50]

De manera similar, para encontrar los elementos más pequeños en una colección, usamos la función nsmallest :

print(heapq.nsmallest(4, numbers))  # [1, 2, 4, 8]

Las funciones nlargest y nsmallest toman un argumento opcional (parámetro clave) para estructuras de datos complicadas. El siguiente ejemplo muestra el uso de la propiedad age para recuperar las personas más antiguas y más jóvenes del diccionario de people :

people = [
    {'firstname': 'John', 'lastname': 'Doe', 'age': 30},
    {'firstname': 'Jane', 'lastname': 'Doe', 'age': 25},
    {'firstname': 'Janie', 'lastname': 'Doe', 'age': 10},
    {'firstname': 'Jane', 'lastname': 'Roe', 'age': 22},
    {'firstname': 'Johnny', 'lastname': 'Doe', 'age': 12},
    {'firstname': 'John', 'lastname': 'Roe', 'age': 45}
]

oldest = heapq.nlargest(2, people, key=lambda s: s['age'])
print(oldest)
# Output: [{'firstname': 'John', 'age': 45, 'lastname': 'Roe'}, {'firstname': 'John', 'age': 30, 'lastname': 'Doe'}]

youngest = heapq.nsmallest(2, people, key=lambda s: s['age'])
print(youngest)
# Output: [{'firstname': 'Janie', 'age': 10, 'lastname': 'Doe'}, {'firstname': 'Johnny', 'age': 12, 'lastname': 'Doe'}]

Artículo más pequeño en una colección.

La propiedad más interesante de un heap es que su elemento más pequeño es siempre el primer elemento: heap[0]

import heapq


numbers = [10, 4, 2, 100, 20, 50, 32, 200, 150, 8]

heapq.heapify(numbers)
print(numbers)
# Output: [2, 4, 10, 100, 8, 50, 32, 200, 150, 20]

heapq.heappop(numbers)  # 2
print(numbers)
# Output: [4, 8, 10, 100, 20, 50, 32, 200, 150]

heapq.heappop(numbers)  # 4
print(numbers)
# Output:  [8, 20, 10, 100, 150, 50, 32, 200]


Modified text is an extract of the original Stack Overflow Documentation
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow