Páginas

martes, 2 de septiembre de 2014

Python: Como contar el numero de veces que un elemento aparece en una lista. Funcion collections.Counter()

Tengo un listado como por ejemplo:

1
2
3
4
4
5
6
6
7
8
9
9
10
11
12
12
12
13
14
14
15
15
15

Deseo contar cuantas veces se ha repetido cada numero:

Mi archivo se llama dictionary.txt, pimero creo una lista:

>>> lista = [item for item in open('dictionary.txt').readlines()]
>>> lista
['1\n', '2\n', '3\n', '4\n', '4\n', '5\n', '6\n', '6\n', '7\n', '8\n', '9\n', '9
\n', '10\n', '11\n', '12\n', '12\n', '12\n', '13\n', '14\n', '14\n', '15\n', '15
\n', '15']





Sin embargo al final de cada lista me aparece un simbolo de final de linea, el cual elimino de la siguiente manera:

>>> for item in lista:
...     if '\n'in item:
...             lista[lista.index(item)]=item.replace('\n', '')
...
>>> lista
['1', '2', '3', '4', '4', '5', '6', '6', '7', '8', '9', '9', '10', '11', '12', '
12', '12', '13', '14', '14', '15', '15', '15']


Ahora lo maravilloso, en el modulo collections existe una funcion llamada Counter, que crea un diccionario con los elementos de una lista y cuenta el numero de ocurrencias:

>>> diccionario= collections.Counter(lista)
>>>
>>> diccionario
Counter({'12': 3, '15': 3, '14': 2, '4': 2, '6': 2, '9': 2, '11': 1, '10': 1, '1
3': 1, '1': 1, '3': 1, '2': 1, '5': 1, '7': 1, '8': 1})


Si no te gusta que al comienzo aparezca la palabra Counter, pues conviertelo a diccionario con la funcion dict()

>>> diccionario = dict(diccionario)
>>> diccionario
{'11': 1, '10': 1, '13': 1, '12': 3, '15': 3, '14': 2, '1': 1, '3': 1, '2': 1, '
5': 1, '4': 2, '7': 1, '6': 2, '9': 2, '8': 1}
>>>

1 comentario: