Articolo originale: Python Unique List – How to Get all the Unique Values in a List or Array di Amy Haddad

Tradotto e adattato da: Ilenia Magoni

Diciamo che hai una lista che contiene alcuni numeri duplicati:

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

Ma invece vuoi una lista di numeri unici.

unique_numbers = [1, 2, 3, 4]

Ci sono alcuni modi diversi per ottenere una lista di valori unici in Python. Questo articolo ti mostrerà come.

Opzione 1 Usare un Set per ottenere elementi unici

Usare un set è un modo per farlo. Un set è utile perché contiene elementi unici.

Puoi usare un set per ottenere elementi unici e poi, trasformare il set in una lista.

Guardiamo a due approcci che usano un set e una lista. Il primo approccio è "verbose" ma è utile per vedere cosa sta accadendo ad ogni step.

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


def get_unique_numbers(numbers):

    list_of_unique_numbers = []

    unique_numbers = set(numbers)

    for number in unique_numbers:
        list_of_unique_numbers.append(number)

    return list_of_unique_numbers


print(get_unique_numbers(numbers))
# result: [1, 2, 3, 4, 5]

Diamo un'occhiata più dettagliata a cosa sta succedendo. Partiamo dalla lista di numeri, numbers. Passo questo lista a una funzione, get_unique_numbers.

Dentro questa funzione creo una lista vuota, che alla fine conterrà tutti i numeri unici. Poi, uso un set per ottenere i numeri unici dalla lista numbers.

unique_numbers = set(numbers)

Ho quello di cui ho bisogno: i numeri unici. Ora ho bisogno di mettere questi valori in una lista. Per farlo, uso un loop per iterare su ogni numero nel set.

for number in unique_numbers:
       list_of_unique_numbers.append(number)

Ad ogni iterazione aggiungo il numero corrente alla lista, list_of_unique_numbers. Infine, ottengo la lista alla fine del programma.

C'è un modo più breve di usare un set e una lista per ottenere valori unici in Python. Questo è ciò che vedremo nella prossima sezione.

Un approccio più breve con set

Tutto il codice scritto sopra può essere condensato in una singola riga con l'aiuto delle funzioni integrate di Python.

numbers = [1, 2, 2, 3, 3, 4, 5]
unique_numbers = list(set(numbers))
print(unique_numbers)
# Result: [1, 2, 3, 4, 5]

Anche se questo codice appare molto diverso dal primo esempio, l'idea è la stessa. Usare un set per ottenere i numeri unici. Poi, trasformare il set in una lista.

unique_numbers = list(set(numbers))

Leggendo il codice qui sopra, è utile pensare "dall'interno verso l'esterno". Il codice più interno viene valutato prima: set(numbers). Poi, viene valutato il codice più esterno: list(set(numbers)).

Opzione 2 – Usare l'iterazione per identificare valori unici

L'iterazione è un altro approccio da considerare.

L'idea principale è creare una lista vuota che conterrà i numeri unici. Poi, usare un loop per iterare su ogni numero nella data lista. Se il numero è già nella lista unica, allora il loop passerà alla prossima iterazione. Altrimenti, il numero verrà aggiunto alla lista.

Consideriamo due modi di usare l'iterazione per ottenere i valori unici da una lista, iniziando con il metodo più verbose.

numbers = [20, 20, 30, 30, 40]


def get_unique_numbers(numbers):
    unique = []

    for number in numbers:
        if number in unique:
            continue
        else:
            unique.append(number)
    return unique


print(get_unique_numbers(numbers))
# Result: [20, 30, 40]

Ecco cosa sta succedendo in ogni step. Partiamo ancora dalla lista di numeri assegnata, numbers. Passo questa lista alla funzione, get_unique_numbers.

Dentro questa funzione, creo una lista vuota, unique. Alla fine, questa lista conterrà tutti i numeri unici.

Uso un loop for per iterare su ogni numero nella lista numbers.

 for number in numbers:
       if number in unique:
           continue
       else:
           unique.append(number)

Il condizionale dentro il loop verifica se il numero dell'iterazione corrente è nella lista unique. Se è così, il loop continua alla prossima iterazione. Altrimenti, il numero viene aggiungo alla lista.

Ecco il punto importante: solo i numeri unici sono aggiunti. Alla fine del loop, ottengo la lista unique che contiene tutti i numeri unici.

Un metodo più breve con l'iterazione

C'è un altro modo per scrivere questa funzione in meno righe.

numbers = [20, 20, 30, 30, 40]


def get_unique_numbers(numbers):
    unique = []
    for number in numbers:
        if number not in unique:
            unique.append(number)
    return unique
#Result: [20, 30, 40]

La differenza è il condizionale. Questa volta è scritto in questo modo: se il numero non è presente in unique, allora aggiungilo.

if number not in unique:
    unique.append(number)

Altrimenti, il loop andrà avanti al prossimo numero della lista numbers.

Il risultato è lo stesso. Però, è a volte più difficile pensare al codice e leggerlo quando contiene not.

Ci sono altri modi per trovare i valori unici in una lista di Python, ma probabilmente ti troverai a usare uno degli approcci spiegati in questo articolo.