En este tutorial aprenderá a eliminar elementos duplicados de las listas en Python.

Cuando trabaja con listas en Python, a veces puede necesitar trabajar sólo con los elementos únicos de la lista – eliminando los duplicados.

Hay varias formas de hacerlo. En este tutorial, repasaremos cinco de estas técnicas.

Conceptos básicos de las listas en Python

Comencemos nuestra discusión repasando los fundamentos de las listas de Python.

Las listas de Python son mutables. Por lo tanto, puede modificarlas in situ añadiendo y eliminando elementos de la lista. Además, las listas de Python son colecciones de elementos no necesariamente únicos.

Entonces, ¿cómo conservar sólo los elementos únicos y eliminar los elementos duplicados o repetidos?

Bueno, puede hacerlo de varias maneras. Puede crear una nueva lista que contenga sólo los elementos únicos de la lista original. O puede optar por modificar la lista original en su lugar y eliminar los elementos duplicados.

Aprenderemos estos métodos en detalle en este tutorial.

Métodos para eliminar duplicados de las listas de Python

Tomemos un ejemplo del mundo real. Supongamos que está en la fiesta de cumpleaños de su amigo 🎊🎉

En la colección de dulces expuesta, ve que hay algunos elementos que se repiten. Ahora le gustaría eliminar esos elementos duplicados de la lista de dulces.

remove-duplicate-from-list

Vamos a crear una lista de dulces que contenga todos los elementos de la imagen anterior.

dulces = ["magdalena", "caramelo", "piruleta", "tarta", "piruleta", "tarta de queso", "caramelo", "magdalena"]

En la lista de dulces anterior, los elementos «caramelo» y «magdalena» se repiten dos veces. Utilicemos esta lista de ejemplo para eliminar los elementos duplicados.

Iterar sobre listas Python para eliminar duplicados

El método más sencillo es crear una nueva lista que contenga cada elemento exactamente una vez.

Lea la celda de código siguiente:

caramelos_únicos = []
for dulce in dulces
  if dulce not in dulces_unicos:
    unique_sweets.append(dulce)

print(dulces_únicos)

# Salida
['magdalena', 'caramelo', 'piruleta', 'tarta', 'tarta de queso']
  • Inicializamos una lista vacía unique_sweets.
  • Mientras recorremos la lista de dulces, accedemos a cada dulce.
  • Si el dulce no está ya presente en la lista unique_sweets, lo añadimos al final de la lista unique_sweets utilizando el método .append().

Supongamos que nos encontramos con un elemento que se repite, por ejemplo, la segunda aparición de ‘caramelo’ en la lista de dulces. Esto no se añade a la lista unique_sweets porque ya está presente: dulce no en unique_sweets se evalúa como Falso para la segunda aparición de ‘magdalena’ y ‘caramelo’.

Por lo tanto, en este método, cada elemento aparece exactamente una vez en la lista unique_sweets-sin ninguna repetición.

Utilice la comprensión de listas para eliminar duplicados

También puede utilizar la comprensión de listas para rellenar la lista unique_sweets.

¿Quiere refrescar los conceptos básicos de la comprensión de listas?

▶️ Consulte el tutorial sobre comprensión de listas en Python.

Utilicemos la expresión de comprensión de listas [output for item in iterable if condition is True ] para reescribir el bucle anterior de forma concisa.

unique_sweets = []
[unique_sweets.append(sweet) for sweet in sweets if sweet not in unique_sweets]
print(dulces_únicos)

# Salida
['magdalena', 'caramelo', 'piruleta', 'tarta', 'tarta de queso']

Aunque está creando una nueva lista, no está rellenando la lista creada con valores. Esto se debe a que la salida es la operación .append() a la lista unique_sweets.

Para eliminar elementos duplicados de las listas de Python, también puede utilizar métodos de lista incorporados, y lo veremos en la siguiente sección.

Utilizar métodos de lista incorporados para eliminar duplicados

Puede utilizar los métodos de lista de Python .count() y .remove() para eliminar elementos duplicados.

– Con la sintaxis list.count(valor), el método .count () devuelve el número de veces que aparece el valor en la lista. Por tanto, el recuento correspondiente a los elementos repetidos será mayor que 1.

list.remove (valor) elimina de la lista la primera aparición del valor.

Utilizando lo anterior, tenemos el siguiente código.

for dulce in dulces:
  # compruebe si el recuento de dulces es > 1 (elemento que se repite)
  if dulces.count(dulce) > 1:
  # si es True, elimine la primera aparición de dulce
    caramelos.eliminar(caramelo)

print(dulces)

# Salida
['tarta', 'piruleta', 'tarta de queso', 'caramelo', 'magdalena']

Dado que el método .remove( ) sólo elimina la primera aparición de un valor, no puede utilizarlo para eliminar elementos que aparezcan más de dos veces.

  • Si un elemento concreto está duplicado (aparece exactamente dos veces), este método elimina la primera aparición.
  • Si un elemento concreto se repite K veces, después de ejecutar el código anterior aún quedarán K-1 repeticiones.

Pero en general, cuando decimos duplicados, solemos referirnos a todas las repeticiones.

Para manejar este caso, podría modificar el bucle anterior para eliminar todas las repeticiones excepto una. En lugar de utilizar una condicional if para comprobar el recuento de un elemento concreto, podría ejecutar un bucle while para eliminar repetidamente las duplicaciones hasta que el recuento de cada elemento de la lista sea 1.

La lista caramelos contiene ahora 2 repeticiones de «magdalena» y 3 repeticiones de «caramelo».

dulces = ["magdalena", "caramelo", "piruleta", "tarta", "piruleta", "caramelo", "tarta de queso", "caramelo", "magdalena"]

Puede utilizar un bucle while para eliminar las repeticiones, como se muestra a continuación. El bucle while sigue ejecutándose mientras el recuento de dulces en dulces sea mayor que 1. Cuando sólo queda una ocurrencia, la condición dulces.recuento(dulces) > 1 se convierte en Falso, y el bucle salta al siguiente elemento.

para dulce en dulces:
  # compruebe si el recuento de dulces es > 1 (elemento que se repite)
  while(caramelos.count(caramelos) > 1):
  # elimine repetidamente la primera ocurrencia de dulce hasta que quede una ocurrencia.
    caramelos.eliminar(caramelo)

print(dulces)
# Salida
['tarta', 'piruleta', 'tarta de queso', 'caramelo', 'magdalena']

Pero el uso de bucles anidados puede no ser muy eficiente, por lo que podría considerar el uso de una de las otras técnicas discutidas si está trabajando con listas grandes.

Hasta ahora, hemos aprendido lo siguiente

  • Métodos para eliminar elementos duplicados de las listas de Python-creando nuevas listas-que contengan sólo elementos únicos
  • Métodos de lista incorporados .count() y .remove() para modificar la lista en su lugar

Hay algunas estructuras de datos incorporadas en Python que requieren que los valores sean todos únicos-sin repetición. Por lo tanto, podemos convertir una lista de Python en una de estas estructuras de datos para eliminar los duplicados. Y luego convertirlas de nuevo en una lista. Aprenderemos cómo hacerlo en las próximas secciones.

Convertir una lista Python en un conjunto para eliminar duplicados

Los conjuntos de Python son colecciones de elementos que son todos únicos. Por lo tanto, el número de elementos presentes en el conjunto (dado por len() es igual al número de elementos únicos presentes.

Puede convertir cualquier iterable de Python en un conjunto utilizando la sintaxis: conjunto(iterable).

Ahora, convirtamos la lista caramelos en un conjunto y examinemos el resultado.

set(caramelos)
# Salida
{'tarta', 'caramelo', 'tarta de queso', 'magdalena', 'piruleta'}

De la salida en la celda de código anterior, vemos que cada elemento aparece exactamente una vez, y se han eliminado los duplicados.

Además, observe que el orden de los elementos no es necesariamente el mismo que su orden en la lista original dulces. Esto se debe a que, además de ser una colección de elementos únicos, un objeto conjunto de Python es una colección desordenada.

Ahora que hemos eliminado los duplicados convirtiendo la lista en un conjunto, podemos volver a convertirla en una lista, como se muestra a continuación.

caramelos_únicos = list(set(caramelos))
print(dulces_únicos)

# Salida
['tarta', 'tarta de queso', 'caramelo', 'magdalena', 'piruleta']

Utilice los elementos de la lista como claves del diccionario para eliminar duplicados

Un diccionario Python es una colección de pares clave-valor donde las claves identifican unívocamente los valores.

Puede crear un diccionario Python utilizando el método .fromkeys( ) con la sintaxis: dict.fromkeys(keys, values). Aquí, claves y valores son iterables que contienen las claves y los valores del diccionario, respectivamente.

  • keys es un parámetro obligatorio, y puede ser cualquier iterable de Python correspondiente a las claves del diccionario.
  • values es un parámetro opcional. Si no especifica el iterable values, se utilizará el valor por defecto None.

Sin especificar los valores, dict.fromkeys(caramelos) devuelve un diccionario Python en el que los valores se establecen en Ninguno – el valor por defecto. La celda de código siguiente lo explica.

dict.fromkeys(caramelos)

# Salida
{'pastel': Ninguno
 'caramelo': Ninguno
 'tarta de queso': Ninguno
 'magdalena': Ninguno
 'piruleta': Ninguno}

Al igual que en la sección anterior, podemos convertir de nuevo el diccionario en una lista, como se muestra a continuación.

caramelos_únicos = list(dict.fromkeys(caramelos))
print(dulces_únicos)
# Salida
['magdalena', 'caramelo', 'piruleta', 'tarta', 'tarta de queso']

A partir de la salida anterior, podemos ver que los elementos duplicados se han eliminado de la lista caramelos.

Recapitulando Up👩‍🏫

He aquí una recapitulación de los distintos métodos que puede utilizar para eliminar elementos duplicados o repeticiones de las listas de Python.

  • Utilice el método de lista de Python .append() para añadir elementos no repetidos a una nueva lista. La nueva lista contiene cada elemento de la lista original exactamente una vez y elimina todas las repeticiones. También puede hacer esto utilizando la comprensión de listas.
  • Utilice los métodos incorporados .count() y .remove() para eliminar los elementos que aparecen exactamente dos veces. Lo mismo puede hacerse en un bucle while para eliminar todas las ocurrencias adicionales.
  • Convierta una lista Python en un conjunto para conservar sólo los elementos únicos.
  • Utilice dict.fromkeys(list) para eliminar cualquier duplicado de la lista, ya que no debería haber claves de repetición del diccionario.

A continuación, consultelos proyectos de Python para practicar y aprender. O aprenda a encontrar el índice de un elemento en las listas de Python. ¡Feliz aprendizaje!