c'est ce que j'ai fait. Y a-t-il un meilleur moyen en python?Quelle est la manière pythonique de compter l'occurrence d'un élément dans une liste?
for k in a_list: if kvMap.has_key(k): kvMap[k]=kvMap[k]+1 else: kvMap[k]=1
Merci
c'est ce que j'ai fait. Y a-t-il un meilleur moyen en python?Quelle est la manière pythonique de compter l'occurrence d'un élément dans une liste?
for k in a_list: if kvMap.has_key(k): kvMap[k]=kvMap[k]+1 else: kvMap[k]=1
Merci
Utilisez defaultdict
from collections import defaultdict
kvmap= defaultdict(int)
for k in a_list:
kvmap[k] += 1
un seul élément:
a_list.count(k)
Tous les éléments:
counts = dict((k, a_list.count(k)) for k in set(a_list))
Est-ce que ce n'est pas assez inefficace? Vous convertissez la liste en un ensemble, en itérant sur elle et en appelant un nombre (probablement O (N) pour chaque élément de l'ensemble.) – Dana
Vous avez raison, il est plus que probable O (n^2), bien que je pense son amusement dans ce genre de façon python –
une expression génératrice au lieu de la compréhension de la liste est suffisante.aussi, en utilisant un tuple au lieu de la liste intérieure semble plus agréable, je pense que – hop
Je ne sais pas, il semble fondamentalement bien pour moi. Votre code est simple et facile à lire, ce qui est une partie importante de ce que je considère comme pythonique.
Vous pouvez le couper un peu comme ceci:
for k in a_list:
kvMap[k] = 1 + kvMap.get(k,0)
c'est ce que je vais poster! – hasen
Une autre solution exploite setdefault():
for k in a_list:
kvMap[k] = kvMap.setdefault(k, 0) + 1
Si votre liste est triée, une alternative serait d'utiliser itertools.groupby. Ce n'est peut-être pas le moyen le plus efficace, mais c'est quand même intéressant. Il retour précis ou chiffré un dict de l'article> count:
>>> import itertools
>>> l = [1,1,2,3,4,4,4,5,5,6,6,6,7]
>>> dict([(key, len([e for e in group]))
for (key, group)
in itertools.groupby(l)])
{1: 2, 2: 1, 3: 1, 4: 3, 5: 2, 6: 3, 7: 1}
Cette vieille question, mais étant donné que l'ajout d'un defaultdict(int)
est un usage courant, il ne faut donc pas surprenant que collections
a un nom spécial pour que (depuis Python 2.7)
>>> from collections import Counter
>>> Counter([1, 2, 1, 1, 3, 2, 3, 4])
Counter({1: 3, 2: 2, 3: 2, 4: 1})
>>> Counter("banana")
Counter({'a': 3, 'n': 2, 'b': 1})
Oh mec, je hadn Excellente! – Dana
La première fois que j'ai rencontré defaultdict, c'était dans l'article correcteur d'orthographe de Peter Norvig: en quelques lignes, il récupère un fichier de mots et le convertit en un dictionnaire de clé = mot value = count Très cool http://www.norvig.com/spell-correct.html – hughdbrown