5 metodi per rimuovere elementi duplicati dagli elenchi Python
Pubblicato: 2022-07-05In questo tutorial imparerai come rimuovere gli elementi duplicati dagli elenchi Python.
Quando si lavora con gli elenchi in Python, a volte potrebbe essere necessario lavorare solo con elementi univoci nell'elenco, rimuovendo i duplicati.
Ci sono diversi modi per farlo. In questo tutorial, esamineremo cinque di queste tecniche.
Nozioni di base sulle liste Python
Iniziamo la nostra discussione esaminando le basi delle liste Python.
Le liste Python sono mutabili. Quindi puoi modificarli sul posto aggiungendo e rimuovendo elementi dall'elenco. Inoltre, le liste Python sono raccolte di elementi non necessariamente univoci.
Quindi, come si conservano solo gli elementi univoci e si rimuovono gli elementi duplicati o ripetuti?
Bene, puoi farlo in diversi modi. Puoi creare un nuovo elenco che contenga solo gli elementi univoci nell'elenco originale. Oppure puoi scegliere di modificare l'elenco originale e rimuovere gli elementi duplicati.
Li impareremo in dettaglio in questo tutorial.
Metodi per rimuovere i duplicati dagli elenchi Python
Facciamo un esempio del mondo reale. Supponi di essere alla festa di compleanno di un tuo amico.
Nella raccolta di dolci mostrata, vedi che ci sono alcuni oggetti che si ripetono. Ora vorresti rimuovere quegli elementi duplicati dall'elenco dei dolci.

Creiamo una lista di sweets
contenente tutti gli articoli nell'immagine sopra.
sweets = ["cupcake","candy","lollipop","cake","lollipop","cheesecake","candy","cupcake"]
Nell'elenco dei sweets
sopra, le voci "caramelle" e "cupcake" vengono ripetute due volte. Usiamo questo elenco di esempio per rimuovere gli elementi duplicati.
Iterare sugli elenchi Python per rimuovere i duplicati
Il metodo più semplice consiste nel creare un nuovo elenco che contenga ogni elemento esattamente una volta.
Leggi la cella del codice qui sotto:
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']
- Inizializziamo una lista vuota
unique_sweets
. - Scorrendo l'
sweets list
, accediamo a ciascunsweet
. - Se
sweet
non è già presente nell'elencounique_sweets
, lo aggiungiamo alla fine dell'elencounique_sweets
usando il metodo.append()
.
Supponiamo di imbattersi in un elemento ripetuto, ad esempio, la seconda occorrenza di "caramelle" nell'elenco dei sweets
. Questo non viene aggiunto all'elenco unique_sweets
in quanto è già presente: sweet not in unique_sweets
False
per la seconda occorrenza di 'cupcake' e 'candy'.
Pertanto, in questo metodo, ogni elemento compare esattamente una volta nell'elenco unique_sweets
, senza alcuna ripetizione.
Usa Comprensione elenco per rimuovere i duplicati
Puoi anche utilizzare la comprensione dell'elenco per popolare l'elenco unique_sweets
.
Vuoi aggiornare le basi della comprensione degli elenchi?
️ Dai un'occhiata al tutorial sulla comprensione degli elenchi in Python.
Usiamo l'espressione di comprensione dell'elenco: [output for item in iterable if condition is True] per riscrivere il ciclo precedente in modo conciso.
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']
Anche se stai creando un nuovo elenco, non stai compilando l'elenco creato con valori. Questo perché l'output è l'operazione .append()
nell'elenco unique_sweets
.
Per rimuovere gli elementi duplicati dagli elenchi Python, puoi anche utilizzare i metodi di elenco incorporati e ne parleremo nella prossima sezione.
Usa i metodi di elenco integrati per rimuovere i duplicati
Puoi usare i metodi dell'elenco Python .count()
e .remove()
per rimuovere gli elementi duplicati.
– Con la sintassi list.count(value) , il metodo
.count()
restituisce il numero di volte in cui ilvalue
si verifica inlist
. Quindi il conteggio corrispondente agli elementi ripetuti sarà maggiore di 1.– list.remove(value) rimuove la prima occorrenza di value dall'elenco.
Usando quanto sopra, abbiamo il seguente codice.
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']
Poiché il metodo .remove()
rimuove solo la prima occorrenza di un valore, non è possibile utilizzarlo per rimuovere elementi che si verificano più di due volte.
- Se un particolare elemento viene duplicato (si verifica esattamente due volte), questo metodo rimuove la prima occorrenza.
- Se un particolare elemento viene ripetuto
K
volte, dopo aver eseguito il codice sopra, le ripetizioniK-1
rimarranno comunque.
Ma in generale, quando diciamo duplicati, di solito ci riferiamo a tutte le ripetizioni.
Per gestire questo caso, puoi modificare il ciclo precedente per rimuovere tutte le ripetizioni tranne una. Invece di utilizzare un condizionale if
per controllare il conteggio di un particolare elemento, è possibile eseguire un ciclo while
per rimuovere ripetutamente le duplicazioni finché il conteggio di ogni elemento nell'elenco non è 1.

L'elenco dei sweets
ora contiene 2 ripetizioni di "cupcake" e 3 ripetizioni di "candy".
sweets = ["cupcake","candy","lollipop","cake","lollipop","candy","cheesecake","candy","cupcake"]
È possibile utilizzare un ciclo while
per rimuovere le ripetizioni, come mostrato di seguito. Il ciclo while continua a funzionare finché il conteggio di sweet in sweets è maggiore di 1. Quando rimane solo un'occorrenza, la condizione sweets.count(sweet) > 1 diventa False e il ciclo passa all'elemento successivo.
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']
Ma l'uso di cicli nidificati potrebbe non essere molto efficiente, quindi potresti prendere in considerazione l'utilizzo di una delle altre tecniche discusse se stai lavorando con elenchi di grandi dimensioni.
Finora, abbiamo imparato quanto segue:
- Metodi per rimuovere elementi duplicati dagli elenchi Python, creando nuovi elenchi, contenenti solo elementi univoci
- Metodi di elenco
.count()
e.remove()
per modificare l'elenco in atto
Esistono alcune strutture dati integrate in Python che richiedono che i valori siano tutti univoci, senza ripetizioni. Pertanto, possiamo eseguire il cast di un elenco Python su una di queste strutture di dati per rimuovere i duplicati. E poi riconvertili in un elenco. Impareremo come farlo nelle prossime sezioni.
Cast Python List in un set per rimuovere i duplicati
I set Python sono raccolte di elementi che sono tutti unici . Pertanto, il numero di elementi presenti nell'insieme (dato da len(<set-obj>
) è uguale al numero di elementi univoci presenti.
Puoi eseguire il cast di qualsiasi iterabile Python in un set usando la sintassi:
set(iterable)
.
Ora, inseriamo le caramelle dell'elenco in un set ed esaminiamo l'output.
set(sweets) # Output {'cake', 'candy', 'cheesecake', 'cupcake', 'lollipop'}
Dall'output nella cella di codice sopra, vediamo che ogni elemento appare esattamente una volta e i duplicati sono stati rimossi.
Inoltre, nota che l'ordine degli articoli non è necessariamente lo stesso dell'ordine nella lista dei dolci originale. Questo perché, oltre ad essere una raccolta di elementi unici, un oggetto set Python è una raccolta non ordinata .
Ora che abbiamo rimosso i duplicati eseguendo il casting dell'elenco in un set, possiamo convertirlo nuovamente in un elenco, come mostrato di seguito.
unique_sweets = list(set(sweets)) print(unique_sweets) # Output ['cake', 'cheesecake', 'candy', 'cupcake', 'lollipop']
Usa gli elementi dell'elenco come chiavi del dizionario per rimuovere i duplicati
Il dizionario Python è una raccolta di coppie chiave-valore in cui le chiavi identificano in modo univoco i valori.
Puoi creare un dizionario Python usando il metodo .fromkeys()
con la sintassi: dict.fromkeys(keys, values)
. Qui, keys
e values
sono iterabili contenenti rispettivamente le chiavi e i valori del dizionario.
-
keys
è un parametro obbligatorio e può essere qualsiasi iterabile Python corrispondente alle chiavi del dizionario. -
values
è un parametro facoltativo . Se non si specificano i valori iterabili, viene utilizzato il valore predefinitoNone
.
Senza specificare i valori, dict.fromkeys(sweets)
restituisce un dizionario Python in cui i valori sono impostati su None
, il valore predefinito. La cella del codice qui sotto spiega questo.
dict.fromkeys(sweets) # Output {'cake': None, 'candy': None, 'cheesecake': None, 'cupcake': None, 'lollipop': None}
Come per la sezione precedente, possiamo nuovamente convertire il dizionario in un elenco, come mostrato di seguito.
unique_sweets = list(dict.fromkeys(sweets)) print(unique_sweets) # Output ['cupcake', 'candy', 'lollipop', 'cake', 'cheesecake']
Dall'output sopra, possiamo vedere che gli elementi duplicati sono stati rimossi dall'elenco sweets
.
Riassumendo
Ecco un riepilogo dei diversi metodi che puoi utilizzare per rimuovere elementi duplicati o ripetizioni dagli elenchi Python.
- Utilizzare il metodo elenco Python .append() per aggiungere elementi non ripetuti a un nuovo elenco. Il nuovo elenco contiene ogni elemento nell'elenco originale esattamente una volta e rimuove tutte le ripetizioni. Puoi anche farlo usando la comprensione dell'elenco.
- Usa i metodi .count() e .remove() integrati per rimuovere gli elementi che si verificano esattamente due volte. Lo stesso può essere inserito in un ciclo while per rimuovere tutte le occorrenze aggiuntive.
- Trasmetti un elenco Python in un set per conservare solo gli elementi univoci.
- Utilizzare dict.fromkeys(list) per rimuovere eventuali duplicati dall'elenco poiché non dovrebbero esserci chiavi di ripetizione del dizionario.
Quindi, dai un'occhiata ai progetti Python per esercitarti e imparare. Oppure scopri come trovare l'indice di un elemento negli elenchi Python. Buon apprendimento!