Geekflare recibe el apoyo de nuestra audiencia. Podemos ganar comisiones de afiliación de los enlaces de compra en este sitio.
En Desarrollo Última actualización: 24 de septiembre de 2023
Compartir en:
Escáner de seguridad de aplicaciones web Invicti - la única solución que ofrece verificación automática de vulnerabilidades con Proof-Based Scanning™.

En este tutorial, aprenderá a utilizar el objeto contador del módulo collection de Python.

Cuando trabaje con secuencias largas en Python, por ejemplo, listas o cadenas de Python, es posible que a veces necesite almacenar los elementos que aparecen en la secuencia y el number of times that aparecen.

Un diccionario de Python es una estructura de datos incorporada adecuada para este tipo de aplicaciones. Sin embargo, la clase Counter de Python, del módulo collections, puede simplificar esta tarea construyendo un contador, que es un diccionario de elementos y su recuento en la secuencia.

En los próximos minutos, aprenderá lo siguiente:

  • Utilizar el objeto contador de Python
  • Crear un diccionario de Python para almacenar valores de recuento de elementos en un iterable
  • Reescribir el diccionario utilizando el contador de Python con una sintaxis simplificada
  • Realizar operaciones como actualizar y restaurar elementos, encontrar la intersección entre dos objetos contador
  • Obtener los elementos más frecuentes en el contador utilizando el método most_common()

¡Empecemos!

Módulo de colecciones de Python y clase contador

A menudo utilizará un diccionario Python es para almacenar los elementos y su recuento en un iterable. Los elementos y el recuento se almacenan como claves y valores, respectivamente.

Como la clase Contador forma parte del módulo de colecciones incorporado de Python, puede importarla en su script de Python de la siguiente forma

from colecciones import Contador

Después de importar la clase Contador como se ha mencionado, puede instanciar un objeto contador como se muestra:

<objeto_contador> = Contador(iterable)

Aquí

  • iterable es cualquier iterable válido de Python, como una lista, cadena o tupla de Python.
  • Los elementos del iterable deben ser hashables.

Ahora que sabemos cómo utilizar Counter para crear objetos contadores a partir de cualquier iterable de Python, empecemos a codificar.

Los ejemplos utilizados en este tutorial se pueden encontrar en este gist de GitHub.

Cómo crear un objeto contador a partir de iterables de Python

Crear un objeto contador a partir de iterables Python

Vamos a crear una cadena Python, digamos, 'renacimiento' y llamémosla palabra.

>>> palabra = "renacimiento"

Nuestro objetivo es crear un diccionario en el que cada letra de la cadena palabra se asigna al número de veces que aparece en la cadena. Un enfoque es utilizar bucles for como se muestra:

>>> cuenta_letras = {}
>>> para letra en palabra:
... si letra no está en cuenta_letras:
... cuenta_letras<x>[letra]</x> = 0
... cuenta_letras<x>[letra]</x> = 1
...
>>> cuenta_letras
{'r': 1, 'e': 2, 'n': 2, 'a': 2, 'i': 1, 's': 2, 'c': 1}

Analicemos lo que hace el fragmento de código anterior:

  • Inicializa letter_count a un diccionario Python vacío.
  • Hace un bucle a través de la cadena de palabras.
  • Comprueba si la letra está presente en el diccionario letter_count.
  • Si la letra no está presente, la añade con un valor de 0 y posteriormente incrementa el valor en 1.
  • Por cada aparición de la letra en la palabra, el valor correspondiente a la letra se incrementa en 1.
  • Esto continúa hasta que realizamos un bucle a través de toda la cadena.

Hemos construido el diccionario cuenta_letras por nuestra cuenta utilizando el bucle para para recorrer la cadena palabra.

Ahora vamos a utilizar la clase Counter del módulo collections. Sólo tenemos que pasar la cadena palabra a Counter() para obtener letter_count sin tener que hacer bucles a través de iterables.

>>> from collections import Contador
>>> cuenta_letras = Contador(palabra)
>>> cuenta_letras
Contador({'e': 2, 'n': 2, 'a': 2, 's': 2, 'r': 1, 'i': 1, 'c': 1})

El objeto contador también es un diccionario Python. Podemos utilizar la función incorporada isinstance() para verificarlo:

>>> isinstance(cuenta_letras,dict)
True

Como se ve, isinstance(cuenta_cartas, dict) devuelva True indicando que el objeto contador cuenta_cartas es una instancia de la clase dict de Python.

Modificación del objeto contador

Hasta ahora, hemos aprendido a crear objetos contadores a partir de cadenas de Python.

También puede modificar objetos contadores actualizándolos con elementos de otro iterable o restándoles otro iterable.

Actualizando un Contador con Elementos de Otro Iterable

Inicialicemos otra cadena otra_palabra:

>>> otra_palabra = "efervescencia"

Supongamos que queremos actualizar el objeto contador cuenta_cartas con los elementos de la cadena otra_palabra.

Podemos utilizar el método update() en el objeto contador letter_count.

>>> letter_count.update(otra_palabra)
>>> letter_count
Counter({'e': 7, 'n': 3, 's': 3, 'c': 3, 'r': 2, 'a': 2, 'f': 2, 'i': 1, 'v': 1})

En la salida, vemos que el objeto contador se ha actualizado para incluir también las letras y su número de apariciones de otra_palabra.

Restar elementos de otro iterable

Ahora vamos a restar el valor de otra_palabra del objeto contador_de_letras. Para ello, podemos utilizar el método subtract(). Al utilizar <objeto_contador>.subtract(<algo_iterable> ) restamos los valores correspondientes a los elementos de <algo_iterable> del <objeto_contador>.

Restemos otra_palabra de cuenta_letras.

>>> cuenta_letras.resta(otra_palabra)
>>> cuenta_letras
Contador({'e': 2, 'n': 2, 'a': 2, 's': 2, 'r': 1, 'i': 1, 'c': 1, 'f': 0, 'v': 0})

Vemos que se han restado los valores correspondientes a las letras de otra_palabra, pero no se han eliminado las claves añadidas 'f' y 'v'. Ahora se asignan a un valor 0.

Nota: Aquí hemos pasado otra_palabra, una cadena de Python, a la llamada al método sustraer(). También podemos pasar un objeto contador de Python u otro iterable.

Intersección entre dos objetos contadores en Python

Intersección entre dos objetos contadores en Python

A veces puede querer encontrar la intersección entre dos objetos contadores de Python para identificar qué claves son comunes entre ambos.

Creemos un objeto contador, digamos, letra_cuenta_2, a partir de la cadena otra_palabra efervescencia

>>> otra_palabra = "efervescencia"
>>> cuenta_letras_2 = Contador(otra_palabra)
>>> cuenta_letras_2
Contador({'e': 5, 'f': 2, 'c': 2, 'r': 1, 'v': 1, 's': 1, 'n': 1})

Podemos utilizar el operador simple & para encontrar la intersección entre cuenta_letras y cuenta_letras_2.

>>> cuenta_letras & cuenta_letras_2
Contador({'e': 2, 'r': 1, 'n': 1, 's': 1, 'c': 1})

Observe cómo obtiene las claves y el número de ocurrencias comunes a las dos palabras. Tanto 'renacimiento' como 'efervescencia' contienen dos apariciones de 'e', y una aparición cada una de 'r', 'n', 's' y 'c' en común.

Encontrar los elementos más frecuentes utilizando most_common

Otra operación común sobre el objeto contador de Python es encontrar los elementos que aparecen con más frecuencia.

Para obtener los k elementos más comunes del contador, puede utilizar el método most_common () en el objeto contador. Aquí, llamamos a most_common () es letter_count para encontrar las tres letras que aparecen con más frecuencia.

>>> letter_count.most_common(3)
[('e', 2), ('n', 2), ('a', 2)]

Vemos que las letras 'e', 'n' y 'a' aparecen dos veces en la palabra 'renacimiento'.

Esto es especialmente útil si el contador contiene un gran número de entradas y le interesa trabajar con las claves más comunes.

Conclusión

He aquí un rápido repaso de lo que hemos aprendido en el tutorial:

  • La clase Contador del módulo de colecciones incorporado de Python puede utilizarse para obtener un diccionario de valores de recuento de todos los elementos de cualquier iterable. Debe asegurarse de que todos los elementos del iterable son hashables.
  • Puede actualizar el contenido de un objeto contador de Python con el contenido de otro objeto contador o de cualquier otro iterable utilizando el método update() con la sintaxis: counter1.update(counter2). Tenga en cuenta que puede utilizar cualquier iterable en lugar de contador2.
  • Si desea eliminar el contenido de uno de los iterables del contador actualizado, puede utilizar el método subtract(): counter1.subtract(counter2).
  • Para encontrar los elementos comunes entre dos objetos contadores, puede utilizar el operador &. Dados dos contadores contador1 y contador2, contador1 & contador2 devuelva la intersección de estos dos objetos contadores.
  • Para obtener los k elementos más frecuentes de un contador, puede utilizar el método most_common (). counter.most_common(k) devuelve los k elementos más frecuentes y sus respectivos recuentos.

A continuación, aprenda a utilizar default dict, otra clase del módulo collections. Puede utilizar default dict en lugar de un diccionario normal de Python para manejar las claves que faltan.

  • Bala Priya C
    Autor
Gracias a nuestros patrocinadores
Más lecturas sobre desarrollo
Potencia tu negocio
Algunas de las herramientas y servicios que le ayudarán a hacer crecer su negocio.
  • Invicti utiliza el Proof-Based Scanning™ para verificar automáticamente las vulnerabilidades identificadas y generar resultados procesables en tan solo unas horas.
    Pruebe Invicti
  • Web scraping, proxy residencial, gestor de proxy, desbloqueador web, rastreador de motores de búsqueda, y todo lo que necesita para recopilar datos web.
    Pruebe Brightdata
  • Monday.com es un sistema operativo de trabajo todo en uno que te ayuda a gestionar proyectos, tareas, trabajo, ventas, CRM, operaciones, flujos de trabajo y mucho más.
    Prueba Monday
  • Intruder es un escáner de vulnerabilidades en línea que encuentra puntos débiles de ciberseguridad en su infraestructura, para evitar costosas violaciones de datos.
    Prueba Intruder