Python Language
Tas
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