5 métodos para eliminar elementos duplicados de las listas de Python

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

Cuando trabaja con listas en Python, es posible que a veces necesite trabajar solo con elementos únicos en la lista, eliminando los duplicados.

Hay algunas maneras diferentes de hacer esto. En este tutorial, repasaremos cinco de estas técnicas.

Conceptos básicos de las listas de Python

Comencemos nuestra discusión revisando los conceptos básicos de las listas de Python.

Las listas de Python son mudable. Para que pueda modificarlos en su lugar agregando y eliminando elementos de la lista. Además, las listas de Python son colecciones de elementos que no son necesariamente únicos.

Entonces, ¿cómo conserva solo los elementos únicos y elimina los elementos duplicados o repetidos?

Bueno, puedes hacer esto de diferentes maneras. Puede crear una nueva lista que contenga solo los elementos únicos de la lista original. O puede optar por modificar la lista original en su lugar y eliminar los elementos duplicados.

Los aprenderemos en detalle en este tutorial.

Métodos para eliminar duplicados de las listas de Python

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

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

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

sweets = ["cupcake","candy","lollipop","cake","lollipop","cheesecake","candy","cupcake"]

En la lista de dulces anterior, los artículos ‘dulce’ y ‘magdalena’ se repiten dos veces. Usemos esta lista de ejemplo para eliminar los elementos duplicados.

Iterar sobre listas de 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 a continuación:

unique_sweets = []
for sweet in sweets:
  if sweet not in unique_sweets:
    unique_sweets.append(sweet)

print(unique_sweets)

# Output
['cupcake', 'candy', 'lollipop', 'cake', 'cheesecake']
  • Inicializamos una lista vacía unique_sweets.
  • Mientras recorremos la lista de dulces, accedemos a cada dulce.
  • Si dulce aún no está presente en la lista de dulces únicos, lo agregamos al final de la lista de dulces únicos usando el método .append().

Suponga que se encuentra con un elemento repetitivo, por ejemplo, la segunda aparición de ‘caramelo’ en la lista de dulces. Esto no se agrega a la lista unique_sweets porque ya está presente: sweet not in unique_sweets se evalúa como False para la segunda aparición de ‘cupcake’ y ‘candy’.

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 usar la comprensión de listas para completar 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.

Usemos la expresión de comprensión de lista: [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(unique_sweets)

# Output
['cupcake', 'candy', 'lollipop', 'cake', 'cheesecake']

Aunque esté creando una nueva lista, no está completando 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 usar métodos de lista incorporados, y lo cubriremos en la siguiente sección.

Use métodos de lista incorporados para eliminar duplicados

Puede usar 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. Entonces, el conteo correspondiente a los elementos repetidos será mayor que 1.

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

Usando lo anterior, tenemos el siguiente código.

for sweet in sweets:
  # check if the count of sweet is > 1 (repeating item)
  if sweets.count(sweet) > 1:
  # if True, remove the first occurrence of sweet
    sweets.remove(sweet)

print(sweets)

# Output
['cake', 'lollipop', 'cheesecake', 'candy', 'cupcake']

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

  • Si un elemento en particular está duplicado (ocurre exactamente dos veces), este método elimina la primera aparición.
  • Si un elemento en particular se repite K veces, luego de ejecutar el código anterior, aún permanecerán K-1 repeticiones.

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

Para manejar este caso, puede modificar el ciclo anterior para eliminar todas las repeticiones excepto una. En lugar de usar un condicional if para verificar el conteo de un elemento en particular, puede ejecutar un ciclo while para eliminar repetidamente las duplicaciones hasta que el conteo de cada elemento en la lista sea 1.

La lista de dulces ahora contiene 2 repeticiones de ‘cupcake’ y 3 repeticiones de ‘candy’.

sweets = ["cupcake","candy","lollipop","cake","lollipop","candy","cheesecake","candy","cupcake"]

Puede usar un ciclo while para eliminar repeticiones, como se muestra a continuación. El ciclo while continúa ejecutándose siempre que el conteo de dulce en dulces sea mayor que 1. Cuando solo queda una ocurrencia, la condición dulces.recuento(dulce) > 1 se vuelve falsa y el ciclo salta al siguiente elemento.

for sweet in sweets:
  # check if the count of sweet is > 1 (repeating item)
  while(sweets.count(sweet) > 1):
  # repeatedly remove the first occurrence of sweet until one occurrence remains.
    sweets.remove(sweet)

print(sweets)
# Output
['cake', 'lollipop', 'cheesecake', 'candy', 'cupcake']

Pero el uso de bucles anidados puede no ser muy eficiente, por lo que podría considerar usar 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 (mediante la creación de nuevas listas) que contengan solo elementos únicos
  • Métodos de lista incorporados .count() y .remove() para modificar la lista en su lugar

Hay algunas estructuras de datos integradas de 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 convertirlos de nuevo en una lista. Aprenderemos cómo hacer esto en las próximas secciones.

Convierta la lista de Python en un conjunto para eliminar duplicados

Los conjuntos de Python son colecciones de elementos que son ú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 Python iterable en un conjunto usando la sintaxis: set (iterable).

Ahora, integremos la lista de dulces en un conjunto y examinemos el resultado.

set(sweets)
# Output
{'cake', 'candy', 'cheesecake', 'cupcake', 'lollipop'}

En el resultado de la celda de código anterior, vemos que cada elemento aparece exactamente una vez y que se han eliminado los duplicados.

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

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

unique_sweets = list(set(sweets))
print(unique_sweets)

# Output
['cake', 'cheesecake', 'candy', 'cupcake', 'lollipop']

Use elementos de lista como claves de diccionario para eliminar duplicados

El diccionario de Python es una colección de pares clave-valor donde las claves identifican de forma única los valores.

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

  • keys es un parámetro requerido, y puede ser cualquier iterable de Python correspondiente a las claves del diccionario.
  • valores es un parámetro opcional. Si no especifica los valores iterables, se usa el valor predeterminado Ninguno.

Sin especificar los valores, dict.fromkeys(dulces) devuelve un diccionario de Python donde los valores se establecen en Ninguno, el valor predeterminado. La siguiente celda de código explica esto.

dict.fromkeys(sweets)

# Output
{'cake': None,
 'candy': None,
 'cheesecake': None,
 'cupcake': None,
 'lollipop': None}

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

unique_sweets = list(dict.fromkeys(sweets))
print(unique_sweets)
# Output
['cupcake', 'candy', 'lollipop', 'cake', 'cheesecake']

Del resultado anterior, podemos ver que los elementos duplicados se han eliminado de la lista de dulces.

Resumiendo👩‍🏫

Aquí hay un resumen de los diferentes métodos que puede usar para eliminar elementos duplicados o repeticiones de las listas de Python.

  • Use el método de lista de Python .append() para agregar elementos que no se repiten 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 usando la comprensión de listas.
  • Utilice los métodos integrados .count() y .remove() para eliminar los elementos que aparecen exactamente dos veces. Lo mismo se puede colocar en un bucle while para eliminar todas las ocurrencias adicionales.
  • Convierta una lista de Python en un conjunto para retener solo los elementos únicos.
  • Use 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, consulte los proyectos de Python para practicar y aprender. O aprenda a encontrar el índice de un elemento en las listas de Python. ¡Feliz aprendizaje!