dans tutoriel

Meilleure façon de compter des occurences en Python

Ce qui est en développement informatique, c’est que pour un problème donné à résoudre, il existe des dizaines, centaines, voir milliers de résolutions possibles. Le gros du travail revient en général à produire qui soit le plus optimisé possible.

Compter en Python n’est en soi pas un gros problème…A condition de le faire proprement. Je vous propose deux possibilités, en partant de la liste d’élements suivante :

colors=[« brown »,« red »,« green »,« yellow »,« yellow »,« brown »,« brown »,« black »]

Le but du jeux est de compter le nombre de fois que chaque élément apparait dans la liste, afin d’obtenir le résultat suivant :

>>> color_counts {‘brown’: 3, ‘yellow’: 2, ‘green’: 1, ‘black’: 1, ‘red’: 1}

La méthode basique

C’est celle à laquelle on aurait tous pensé immédiatement. On boucle sur la liste, et on incrémente un dictionnaire possédant l’objet recherché pour clé :

[code]
colors = ["brown", "red", "green", "yellow", "yellow", "brown", "brown", "black"]
color_counts = {}
for c in colors:
if color_counts.has_key(c):
color_counts[c] = color_counts[c] + 1
else:
color_counts[c] = 1
[/code]

La méthode efficace

 On utilise cette fois un bloque Try afin de compter si cela est possible (fonction de la variable color_counts(c) ), sinon on lève une exception ou l’on initialise la variable à 1

[code]
colors = ["brown", "red", "green", "yellow", "yellow", "brown", "brown", "black"]
color_counts = {}
for c in colors:
try:
color_counts[c] = color_counts[c] + 1
except KeyError:
color_counts[c] = 1
[/code]

 

Mais on peut faire encore plus efficace en utilisant la méthode get présente dans les dictionnaires :

[code]
colors = ["brown", "red", "green", "yellow", "yellow", "brown", "brown", "black"]
color_counts = {}
for c in colors:
color_counts[c] = color_counts.get(c, 0) + 1
[/code]

 

Je suis sur et certain qu’il en existe encore d’autres, certainement plus efficace…Si vous en trouvez n’hésitez pas à commenter cet article

Laisser un commentaire