Artículo original escrito por: Amy Haddad
Artículo original: Python Unique List – How to Get all the Unique Values in a List or Array
Traducido y adaptado por: Rafael D. Hernandez

Supongamos que tienes una lista que contiene números duplicados:

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

Pero quieres una lista de números únicos.

numeros_unicos = [1, 2, 3, 4]

Hay algunas maneras de obtener una lista de valores únicos en Python. Este artículo te mostrará cómo hacerlo.

Opción 1: Usar un conjunto para obtener elementos únicos

Usando un set (conjunto) es una manera para hacerlo. Un conjunto es útil porque contiene elementos únicos.

Puedes usar un conjunto para obtener los elementos únicos. Luego, conviertes el conjunto en una lista.

Veamos dos enfoques que utilizan un conjunto y una lista. El primer enfoque es detallado, pero es útil ver lo que está sucediendo en cada paso del camino.

numeros = [1, 2, 2, 3, 3, 4, 5]


def obten_numeros_unicos(numeros):

    lista_de_numeros_unicos = []

    numeros_unicos = set(numeros)

    for numero in numeros_unicos:
        lista_de_numeros_unicos.append(numero)

    return lista_de_numeros_unicos


print(obten_numeros_unicos(numeros))
# resultado: [1, 2, 3, 4, 5]

Echemos un vistazo más de cerca a lo que está pasando. Me es dando una lista de números, numbers. Paso esta lista a la función obten_numeros_unicos.

Dentro de la función, creo una lista vacía, que eventualmente contendrá todos los números únicos. Luego, utilizo un set para obtener los números únicos de la lista de numeros.

numeros_unicos = set(numeros)

Tengo lo que necesito: los números únicos. Ahora necesito poner estos valores en una lista. Para ello, utilizo un bucle for para recorrer cada número del conjunto.

for numero in numeros_unicos:
       lista_de_numeros_unicos.append(numero)

En cada iteración agrego el número actual a la lista, lista_de_numeros_unicos. Finalmente, devuelvo esta lista al final del programa.

Hay una forma más corta de usar un conjunto y una lista para obtener valores únicos en Python. Eso es lo que abordaremos a continuación.

Un enfoque más corto con set

Todo el código escrito en el ejemplo anterior se puede condensar en una línea con la ayuda de las funciones integradas de Python.

numeros = [1, 2, 2, 3, 3, 4, 5]
numeros_unicos = list(set(numeros))
print(numeros_unicos)
# Resultado: [1, 2, 3, 4, 5]

Aunque este código se ve muy diferente del primer ejemplo, la idea es la misma. Usa un conjunto para obtener los números únicos. Luego, convierte el set en una lista.

numeros_unicos = list(set(numeros))

Es útil pensar "de adentro hacia afuera" al leer el código anterior. El código más interno se evalúa primero: set(numeros). A continuación, se evalúa el código más externo: list(set(numeros)).

Opción 2: Uso de la iteración para identificar valores únicos

La iteración es otro enfoque a considerar.

La idea principal es crear una lista vacía que contenga números únicos. Luego, usar una iteración de bucle for sobre cada número de la lista dada. Si el número ya está en la lista única, continúa con la siguiente iteración. De lo contrario, añádale el número.

Veamos dos formas de usar la iteración para obtener los valores únicos en una lista, comenzando con la más detallada.

numeros = [20, 20, 30, 30, 40]


def obten_numeros_unicos(numeros):
    unicos = []

    for numero in numeros:
        if numero in unicos:
            continue
        else:
            unicos.append(numero)
    return unicos


print(obten_numeros_unicos(numeros))
# Resultado: [20, 30, 40]

Esto es lo que está sucediendo en cada paso del camino. Primero, me dan una lista de números, numeros. Paso esta lista a mi función, obten_numeros_unicos.

Dentro de la función, creo una lista vacía, unicos. Eventualmente, esta lista contendrá todos los números únicos.

Utilizo un bucle for para recorrer cada número de la lista de numeros.

 for numero in numeros:
       if numero in unicos:
           continue
       else:
           unicos.append(numero)

El condicional dentro del bucle comprueba si el número de la iteración actual está en la lista unicos. Si es así, el bucle continúa hasta la siguiente iteración. De lo contrario, el número se agrega a esta lista.

Este es el punto importante: solo se agregan los números únicos. Una vez que se completa el bucle, devuelvo unicos que contiene todos los números únicos.

Un enfoque más corto con iteración

Hay otra forma de escribir la función en menos líneas.

numeros = [20, 20, 30, 30, 40]


def obten_numeros_unicos(numeros):
    unicos = []
    for numero in numeros:
        if numero not in unicos:
            unicos.append(numero)
    return unicos
#Resultado: [20, 30, 40]

La diferencia es el condicional. Esta vez está configurado para que se lea de la siguiente manera: si el número no está en unicos, agréguelo.

if numero not in unicos:
    unicos.append(numero)

De lo contrario, el bucle se moverá al siguiente número de la lista, numeros.

El resultado es el mismo. Sin embargo, a veces es más difícil pensar y leer código cuando se niega el booleano.

Hay otras formas de encontrar valores únicos en una lista de Python. Pero es probable que te encuentres encontrando uno de los enfoques que se tratan en este artículo.

Escribo sobre aprender a programar y las mejores formas de hacerlo en amymhaddad.com Síganme en Twitter: @amymhaddad.