Eliminar duplicados de una lista en Python

  1. Eliminar duplicados de una lista usando la función set() en Python
  2. Eliminar duplicados y mantener el orden en una lista usando OrderDict en Python

Una Lista en Python es una estructura de datos que se utiliza para almacenar datos en un orden determinado. La lista puede almacenar datos de múltiples tipos, es decir, int, float, string, otra lista, etc. Las listas son mutables, lo que significa que los valores, una vez creados, pueden modificarse posteriormente. Se representa con corchetes [].

myList = [2, 1, 2, 3, 0, 6, 7, 6, 4, 8]
print(myList)

Producción:

[2, 1, 2, 3, 0, 6, 7, 6, 4, 8]

Puedes eliminar los elementos duplicados de la lista anterior utilizando un bucle for como se muestra a continuación.

myList = [2, 1, 2, 3, 0, 6, 7, 6, 4, 8]

resultantList = []
 
for element in myList:
    if element not in resultantList:
        resultantList.append(element)

print(resultantList)

Producción:

[2, 1, 3, 0, 6, 7, 4, 8]

Si no quieres escribir tanto código, entonces hay dos formas más populares de eliminar elementos duplicados de una Lista en Python.

  1. Si no quieres mantener el orden de los elementos dentro de una lista después de eliminar los elementos duplicados, entonces puedes utilizar una estructura de datos Set.
  2. Si quieres mantener el orden de los elementos dentro de una lista después de eliminar los elementos duplicados, entonces puedes usar algo llamado OrderedDict.

Eliminar duplicados de una lista usando la función set() en Python

Para eliminar los duplicados de una lista, podemos utilizar otra estructura de datos llamada Set. Un Set es un tipo de datos no ordenado que contiene sólo valores únicos. El orden en el que el conjunto almacena los valores es diferente al orden en el que podrías haber insertado los elementos en un conjunto. Los conjuntos se representan con llaves {}.

Por lo tanto, cuando se imprimen los elementos almacenados dentro del conjunto, el orden de la salida será diferente. Esta es la razón por la que no se puede realizar la indexación en un conjunto porque no está ordenado.

mySet = {80, 10, 50, 18, 3, 50, 8, 18, 9, 8}
print(mySet)

Producción:

{3, 8, 9, 10, 80, 18, 50}

Observa como el orden de los elementos ha cambiado después de que hayamos impreso los elementos.

En un conjunto no se permiten duplicados, lo que significa que si tienes el mismo elemento varias veces, el conjunto lo considerará como un solo elemento. Esta es la razón por la que usamos un conjunto para eliminar los elementos duplicados de una lista en Python.

original_list = [80, 10, 50, 18, 3, 50, 8, 18, 9, 8]

print("Original List is: ",original_list)

convert_list_to_set = set(original_list)
print("Set is: ",convert_list_to_set)

new_list = list(convert_list_to_set)
print("Resultant List is: ",new_list)

original_list = list(convert_list_to_set)
print("Removed duplicates from original list: ",original_list)

Producción:

Original List is:  [80, 10, 50, 18, 3, 50, 8, 18, 9, 8]
Set is:  {3, 8, 9, 10, 80, 18, 50}
Resultant List is:  [3, 8, 9, 10, 80, 18, 50]
Removed duplicates from original list:  [3, 8, 9, 10, 80, 18, 50]

Convertimos una lista en un conjunto aplicando la función set(). Luego convertimos el conjunto convertido, que ha eliminado los duplicados, en una lista aplicando la función list().

Eliminar duplicados y mantener el orden en una lista usando OrderDict en Python

El problema de utilizar un conjunto para eliminar los elementos duplicados es que no almacena los elementos en un orden determinado. Por lo tanto, si no te importa el orden en el que se almacenan los elementos en la lista resultante, es decir, la lista que has creado después de eliminar los duplicados, entonces en ese caso puedes ir con la estructura de datos Set.

Pero si quieres mantener el orden de los elementos dentro de una lista después de eliminar los duplicados, entonces puedes utilizar OrderedDict en Python. El OrderDict preserva el orden en que los elementos han sido insertados en la lista. Para utilizar OrderDict primero hay que importarlo del módulo collections de Python from collections import OrderedDict.

from collections import OrderedDict

myList = [2, 1, 2, 3, 0, 6, 7, 6, 8, 0, 4, 8]

final_list = list(OrderedDict.fromkeys(myList))

print(final_list)

Producción:

[2, 1, 3, 0, 6, 7, 8, 4]

Artículo relacionado - Python List

  • Cómo aplanar una lista en Python
  • Convertir dos listas en diccionario en Python