veces una sacar repite repetidos palabras numero lista frecuencia encontrar elementos cuantas contar agregar python

una - frecuencia de palabras python



¿Cuál es la manera pitónica de contar la ocurrencia de un elemento en una lista? (6)

Esto es lo que hice. ¿hay una mejor manera en Python?

for k in a_list: if kvMap.has_key(k): kvMap[k]=kvMap[k]+1 else: kvMap[k]=1

Gracias


No sé, básicamente se ve bien para mí. Su código es simple y fácil de leer, que es una parte importante de lo que considero pitónico.

Puedes recortarlo un poco así:

for k in a_list: kvMap[k] = 1 + kvMap.get(k,0)


Otra solución explota setdefault ():

for k in a_list: kvMap[k] = kvMap.setdefault(k, 0) + 1


Use defaultdict

from collections import defaultdict kvmap= defaultdict(int) for k in a_list: kvmap[k] += 1


Elemento individual:

a_list.count(k)

Todos los elementos:

counts = dict((k, a_list.count(k)) for k in set(a_list))


Si su lista está ordenada, una forma alternativa sería usar itertools.groupby . Esta podría no ser la manera más efectiva, pero de todos modos es interesante. Retomas un dict de item> 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}


Una pregunta tan vieja, pero considerando que agregar un defaultdict(int) es un uso tan común, no debería sorprender que las collections tengan un nombre especial para eso (desde 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})