Recherche…


Les plus gros et les plus petits objets d'une collection

Pour trouver les plus gros éléments d'une collection, le module heapq a une fonction appelée nlargest , nous lui passons deux arguments, le premier est le nombre d'éléments à récupérer, le second est le nom de la collection:

import heapq


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

De même, pour trouver les plus petits éléments d'une collection, nous utilisons la fonction nsmallest :

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

Les fonctions nlargest et nsmallest un argument facultatif (paramètre clé) pour les structures de données complexes. L'exemple suivant montre l'utilisation de la propriété age pour récupérer le dictionnaire de people le plus ancien et le plus jeune:

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'}]

Le plus petit article d'une collection

La propriété la plus intéressante d'un heap est que son plus petit élément est toujours le premier élément: 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
Sous licence CC BY-SA 3.0
Non affilié à Stack Overflow