Saltar al contenido

Contador de colecciones de Python – PythonForBeginners.com

Descripción general del módulo de cobros

El módulo Colecciones implementa tipos de datos de contenedores de alto rendimiento (más allá
la lista de tipos incorporada, dict y tuple) y contiene muchas estructuras de datos útiles
que puede utilizar para almacenar información en la memoria.

Este artículo tratará sobre el objeto Contador.

Encimera

Un contador es un contenedor que rastrea cuántas veces se agregan valores equivalentes.

Se puede utilizar para implementar los mismos algoritmos para los que otros lenguajes comúnmente
utilice estructuras de datos de bolsa o de conjuntos múltiples.

Importando el módulo

Importar colecciones hace que el material de las colecciones esté disponible como:
colecciones algo

import collections

Como solo vamos a usar el Contador, simplemente podemos hacer esto:

from collections import Counter

Inicializando

Counter admite tres formas de inicialización.

Su constructor se puede llamar con una secuencia de elementos (iterable), un diccionario
que contiene claves y conteos (mapeo, o usando argumentos de palabras clave mapeando cadenas
nombres a recuentos (argumentos de palabras clave).

import collections

print collections.Counter(['a', 'b', 'c', 'a', 'b', 'b'])

print collections.Counter({'a':2, 'b':3, 'c':1})

print collections.Counter(a=2, b=3, c=1)

Los resultados de las tres formas de inicialización son los mismos.

$ python collections_counter_init.py

Counter({'b': 3, 'a': 2, 'c': 1})
Counter({'b': 3, 'a': 2, 'c': 1})
Counter({'b': 3, 'a': 2, 'c': 1})

Crear y actualizar contadores

Se puede construir un contador vacío sin argumentos y poblar a través del
método update ().

import collections

c = collections.Counter()
print 'Initial :', c

c.update('abcdaab')
print 'Sequence:', c

c.update({'a':1, 'd':5})
print 'Dict    :', c

Los valores de recuento aumentan en función de los nuevos datos, en lugar de reemplazarlos.

En este ejemplo, la cuenta de a va de 3 a 4.

$ python collections_counter_update.py

Initial : Counter()

Sequence: Counter({'a': 3, 'b': 2, 'c': 1, 'd': 1})

Dict    : Counter({'d': 6, 'a': 4, 'b': 2, 'c': 1})

Acceso a contadores

Una vez que se completa un contador, sus valores se pueden recuperar mediante la API del diccionario.

import collections

c = collections.Counter('abcdaab')

for letter in 'abcde':
    print '%s : %d' % (letter, c[letter])

El contador no genera KeyError para elementos desconocidos.

Si no se ha visto un valor en la entrada (como con e en este ejemplo),
su cuenta es 0.

Entrenamiento de Python recomendado

Para el entrenamiento de Python, nuestra principal recomendación es DataCamp.

$ python collections_counter_get_values.py

a : 3
b : 2
c : 1
d : 1
e : 0

Elementos

El método elements () devuelve un iterador sobre elementos que se repiten cada uno
veces como su cuenta.

Los elementos se devuelven en orden arbitrario.

import collections

c = collections.Counter('extremely')

c['z'] = 0

print c

print list(c.elements())

El orden de los elementos no está garantizado y los elementos con recuentos inferiores a cero son
no incluido.

$ python collections_counter_elements.py

Counter({'e': 3, 'm': 1, 'l': 1, 'r': 1, 't': 1, 'y': 1, 'x': 1, 'z': 0})
['e', 'e', 'e', 'm', 'l', 'r', 't', 'y', 'x']

Más común

Utilice most_common () para producir una secuencia de los n encontrados con más frecuencia
valores de entrada y sus respectivos recuentos.

import collections

c = collections.Counter()
with open('/usr/share/dict/words', 'rt') as f:
    for line in f:
        c.update(line.rstrip().lower())

print 'Most common:'
for letter, count in c.most_common(3):
    print '%s: %7d' % (letter, count)

Este ejemplo cuenta las letras que aparecen en todas las palabras del sistema.
diccionario para producir una distribución de frecuencia, luego imprime los tres más comunes
letras.

Al omitir el argumento de most_common () se produce una lista de todos los elementos,
en orden de frecuencia.

$ python collections_counter_most_common.py

Most common:
e:  234803
i:  200613
a:  198938

Aritmética

Las instancias de contador admiten operaciones aritméticas y de conjuntos para agregar resultados.

import collections

c1 = collections.Counter(['a', 'b', 'c', 'a', 'b', 'b'])
c2 = collections.Counter('alphabet')

print 'C1:', c1
print 'C2:', c2

print '
Combined counts:'
print c1 + c2

print '
Subtraction:'
print c1 - c2

print '
Intersection (taking positive minimums):'
print c1 & c2

print '
Union (taking maximums):'
print c1 | c2

Cada vez que se produce un nuevo contador a través de una operación, cualquier elemento con cero o
se descartan los recuentos negativos.

La cuenta para a es la misma en c1 y c2, por lo que la resta lo deja en cero.

$ python collections_counter_arithmetic.py

C1: Counter({'b': 3, 'a': 2, 'c': 1})
C2: Counter({'a': 2, 'b': 1, 'e': 1, 'h': 1, 'l': 1, 'p': 1, 't': 1})

#Combined counts:
Counter({'a': 4, 'b': 4, 'c': 1, 'e': 1, 'h': 1, 'l': 1, 'p': 1, 't': 1})

#Subtraction:
Counter({'b': 2, 'c': 1})

#Intersection (taking positive minimums):
Counter({'a': 2, 'b': 1})

#Union (taking maximums):
Counter({'b': 3, 'a': 2, 'c': 1, 'e': 1, 'h': 1, 'l': 1, 'p': 1, 't': 1})

Contando palabras

Cuenta las apariciones de palabras en una lista.

cnt = Counter()

for word in ['red', 'blue', 'red', 'green', 'blue', 'blue']:
    cnt[word] += 1

print cnt

Counter({'blue': 3, 'red': 2, 'green': 1})

El contador toma un iterable y también podría escribirse así:

mywords = ['red', 'blue', 'red', 'green', 'blue', 'blue']

cnt = Counter(mywords)

print cnt

Counter({'blue': 3, 'red': 2, 'green': 1})

Encuentra las palabras más comunes

Encuentra las diez palabras más comunes en Hamlet

import re

words = re.findall('w+', open('hamlet.txt').read().lower())

print Counter(words).most_common(10)

[('the', 1143), ('and', 966), ('to', 762), ('of', 669), ('i', 631),
 ('you', 554),  ('a', 546), ('my', 514), ('hamlet', 471), ('in', 451)]

Fuentes

No olvide leer los enlaces a continuación para obtener más información.

http://www.doughellmann.com/PyMOTW/collections/
http://docs.python.org/2/library/collections.html#collections.Counter

Entrenamiento de Python recomendado

Para el entrenamiento de Python, nuestra principal recomendación es DataCamp.