HOWTO · Python

Contar elementos en lista de Python

Este tutorial demuestra cómo contar elementos en una lista en Python

En esta página

«Contar elementos en una lista» puede significar tres tareas distintas, y Python tiene una herramienta directa para cada una. Utilice len() cuando necesite el número total de elementos, list.count() cuando necesite las apariciones de un solo valor y Counter del módulo collections cuando necesite una frecuencia para cada valor a la vez. Un bucle manual con un diccionario genera el mismo resultado de frecuencias y muestra exactamente cómo funciona el conteo. Este tutorial recorre cada método con ejemplos ejecutables para que pueda elegir el enfoque que mejor se adapte a su tarea.

Obtenga el número total de elementos con len()

La función integrada len() devuelve el número de elementos de nivel superior de una lista. Funciona con cualquier tipo de elemento —números, cadenas, valores booleanos o incluso otras listas— porque mide la lista en sí, no los valores que contiene.

Ejecute este ejemplo:

El código y las etiquetas o salidas visibles de esta sección se mantienen en inglés.

items = [10, "apple", 3.14, [1, 2, 3]]

print(len(items))
4

La lista contiene cuatro elementos: un entero, una cadena, un número de punto flotante y una lista anidada. len() devuelve 4 porque la lista anidada [1, 2, 3] cuenta como un solo elemento en el nivel exterior. Si necesita incluir elementos almacenados dentro de listas anidadas, primero aplane la estructura o sume por separado las longitudes de las listas internas: len() nunca examina más allá del nivel superior.

Cuente las apariciones de un valor con list.count()

El método list.count() devuelve cuántas veces aparece un valor dado en la lista. Pase el valor que busca y recorrerá la lista por usted:

El código y las etiquetas o salidas visibles de esta sección se mantienen en inglés.

my_list = [1, 2, 3, 2, 1, 4, 2]

print(my_list.count(2))
print(my_list.count(9))
3
0

El valor 2 aparece tres veces, mientras que 9 no aparece nunca, por lo que la segunda llamada devuelve 0. list.count() funciona con cualquier tipo de elemento que pueda contener la lista, incluidas cadenas y datos mixtos.

Tenga en cuenta dos limitaciones. Cada llamada responde a una pregunta sobre un solo valor, por lo que contar tres valores diferentes requiere tres llamadas independientes; para obtener una distribución completa de frecuencias, utilice Counter o un bucle. Y en una lista anidada, list.count() solo coincide con elementos completos iguales al valor pasado; un valor almacenado dentro de una lista anidada no se detecta a menos que primero aplane la lista.

Cuente todos los valores con Counter

La clase Counter del módulo collections construye un mapa de frecuencias para cada valor en una sola pasada. Se comporta como un diccionario que asocia cada elemento con su cuenta:

El código y las etiquetas o salidas visibles de esta sección se mantienen en inglés.

from collections import Counter

my_list = [1, 2, 3, 2, 1, 4, 2]
element_count = Counter(my_list)

print(element_count)
print(element_count[2])
print(element_count[9])
Counter({2: 3, 1: 2, 3: 1, 4: 1})
3
0

Indexar un Counter funciona como un diccionario, con una diferencia útil: leer una clave que nunca se contó devuelve 0 en lugar de generar un error, por lo que element_count[9] imprime 0 de forma segura.

Como internamente cada valor se convierte en una clave de diccionario, todos los elementos deben ser hashables. Los enteros, las cadenas y las tuplas cumplen este requisito; una lista anidada no. Para listas de elementos no hashables, primero convierta los elementos a una forma hashable o cuéntelos con otro enfoque.

Cree un diccionario de frecuencias con un bucle

Un bucle simple con un diccionario produce las mismas frecuencias y hace visibles los mecanismos. Inicialice un diccionario y, a continuación, incremente la cuenta de cada elemento al recorrer la lista:

El código y las etiquetas o salidas visibles de esta sección se mantienen en inglés.

my_list = [1, 2, 3, 2, 1, 4, 2]
element_count = {}

for element in my_list:
    if element in element_count:
        element_count[element] += 1
    else:
        element_count[element] = 1

print(element_count)
{1: 2, 2: 3, 3: 1, 4: 1}

El resultado asocia cada valor con su cuenta: 2 aparece tres veces, 1 aparece dos veces, y 3 y 4 aparecen una vez. Este patrón realiza una sola pasada por la lista y le da control total: puede transformar cada elemento antes de contarlo, omitir valores seleccionados o acumular algo distinto de una simple cuenta. Se aplica la misma restricción de hash: cada elemento se convierte en una clave de diccionario, por lo que los elementos no hashables, como las listas anidadas, deben convertirse o aplanarse primero.

Para elegir entre estas herramientas, ajuste el método a la pregunta. Utilice len() para el número total de elementos, list.count() para un solo valor, y Counter o un bucle con diccionario para obtener un mapa completo de frecuencias.