HOWTO · Python

Cómo contar los valores únicos en la lista Python

Contar valores únicos en la lista de Python

En esta página

Una forma sencilla de contar los valores únicos de una lista de Python es len(set(values)). Funciona siempre que los elementos de la lista sean hashables: los números, las cadenas y las tuplas cuyos elementos sean todos hashables cumplen este requisito. Si también necesitas saber cuántas veces aparece cada valor, collections.Counter te da en una sola pasada el recuento de valores distintos y la frecuencia de cada uno. numpy.unique es una opción natural cuando tus datos ya están almacenados en un array de NumPy. En este artículo se explican los tres enfoques y cómo elegir entre ellos.

Contar valores únicos con set()

La función integrada set() convierte una lista en un conjunto, que almacena cada valor distinto una sola vez. Si aplicas len() al resultado, obtienes el número de valores únicos sin necesidad de importar nada más.

Ejecuta este ejemplo. El código y las etiquetas o salidas visibles se mantienen en inglés, como en el original:

values = [1, 2, 2, 3, 4, 4, 5]
unique_values = set(values)

print(len(unique_values))

Salida:

5

set(values) descarta los 2 y 4 repetidos, y len() indica cuántos elementos quedan. Los elementos de entrada deben ser hashables: Python produce un TypeError si la lista contiene elementos como otras listas o diccionarios. Ten en cuenta que un conjunto no conserva el orden original de la lista; responde «cuántos», pero no «cuál apareció primero». Si necesitas los valores únicos en el orden de su primera aparición, usa list(dict.fromkeys(values)); su longitud da el mismo recuento de valores distintos.

Contar valores únicos con collections.Counter

collections.Counter es una clase similar a un diccionario que cuenta cuántas veces aparece cada elemento de un iterable. Es la opción adecuada si quieres obtener a la vez el recuento de valores distintos y la frecuencia de cada uno.

El código y las etiquetas o salidas visibles de este ejemplo se mantienen en inglés, como en el original:

from collections import Counter

values = ["apple", "banana", "apple", "orange", "banana", "kiwi"]
counter = Counter(values)

print(len(counter))
print(dict(counter))

Salida:

4
{'apple': 2, 'banana': 2, 'orange': 1, 'kiwi': 1}

counter asocia cada valor con su frecuencia, así que len(counter) cuenta las claves distintas: cuatro en esta lista. Al consultar el contador por índice, por ejemplo con counter["apple"], obtienes la frecuencia de un valor concreto. counter.most_common(1) devuelve el elemento más frecuente. Al igual que set(), collections.Counter funciona con elementos hashables y forma parte de la biblioteca estándar.

Contar valores únicos con NumPy

NumPy es un paquete de terceros que puedes instalar con pip install numpy. Su función numpy.unique devuelve los valores únicos ordenados de una entrada similar a un array. El tamaño del resultado es el recuento de valores distintos; si pasas return_counts=True, también obtienes la frecuencia de cada valor.

El código y las etiquetas o salidas visibles de este ejemplo se mantienen en inglés, como en el original:

import numpy as np

values = np.array([1, 2, 2, 3, 4, 4, 5])
unique_values, counts = np.unique(values, return_counts=True)

print(len(unique_values))
for value, count in zip(unique_values, counts):
    print(value, count)

Salida:

5
1 1
2 2
3 1
4 2
5 1

Aquí, unique_values contiene los cinco números distintos en orden, y counts indica cuántas veces aparece cada uno: 2 y 4 aparecen dos veces. Como numpy.unique ordena el resultado, también es útil cuando necesitas los valores distintos ordenados. Elígelo si tus datos ya están en un array de NumPy o si ya dependes de NumPy. Para una lista normal de Python, el enfoque con set() evita esa dependencia adicional.

Elige el enfoque adecuado

Los tres enfoques dan el mismo recuento de valores distintos. Elige el que mejor se ajuste a tus datos y a lo que necesites obtener:

  • Usa set() si solo necesitas contar elementos distintos y hashables, y quieres una solución breve que utilice únicamente la biblioteca estándar.
  • Usa collections.Counter si también necesitas la frecuencia de cada valor, los elementos más comunes u otros recuentos por valor.
  • Usa numpy.unique si tus datos ya están en un array de NumPy o quieres los valores únicos ordenados; añade return_counts=True para obtener las frecuencias.

El factor decisivo es la información adicional que necesitas —frecuencias, resultados ordenados o evitar dependencias adicionales—, no el recuento en sí, que los tres enfoques obtienen de la misma manera.