Come rimuovere i duplicati da un elenco in Python

โšก Riepilogo intelligente

Rimozione dei duplicati da un Python La creazione di liste puรฒ essere realizzata con diversi approcci integrati, tra cui set(), dict.fromkeys(), cicli, list comprehension e metodi di libreria di NumPy e Pandas, ognuno dei quali bilancia la conservazione dell'ordine con la velocitร .

  • ๐Ÿ”˜ Imposta metodo: Il metodo set() restituisce istantaneamente gli elementi distinti, ma non preserva l'ordine originale della lista.
  • โ˜‘๏ธ Ordine confermato: dict.fromkeys() e OrderedDict rimuovono i duplicati mantenendoping l'ordine di inserimento visto per primo.
  • โœ… Controllo manuale: Un ciclo for o una list comprehension con controllo di appartenenza mantengono l'ordine e la leggibilitร .
  • ๐Ÿงช Metodi di biblioteca: Le funzioni unique() di NumPy e Pandas rimuovono i dati duplicati e restituiscono un elenco tramite il metodo tolist().
  • ๏ธ Limite di hashability: Le chiavi di insiemi e dizionari richiedono elementi hashable, quindi liste o dizionari necessitano di un approccio basato su cicli.
  • ๐Ÿค– Flussi di lavoro basati sull'intelligenza artificiale: Le pipeline di machine learning eliminano i duplicati dai dati di addestramento utilizzando la funzione drop_duplicates() di Pandas per prevenire distorsioni e fughe di dati.

Rimuovere i duplicati da un elenco in Python

Python rimuovere i duplicati da un elenco

Una lista รจ un contenitore che contiene diversi Python oggetti, che potrebbero essere numeri interi, parole, valori, ecc. รˆ l'equivalente di un array in altri linguaggi di programmazione.

Quindi qui esamineremo diversi modi in cui possiamo rimuovere i duplicati da un dato elenco in Python.

Metodo 1) Rimuovi i duplicati dall'elenco utilizzando Set

Per rimuovere i duplicati da un elenco, รจ possibile utilizzare la funzione integrata set(). La particolaritร  del metodo set() รจ che restituisce elementi distinti.

Abbiamo una lista: [1,1,2,3,2,2,4,5,6,2,1]. La lista contiene molti duplicati che dobbiamo rimuovere per ottenere solo gli elementi distinti. La lista viene passata alla funzione integrata set(). Later L'elenco finale viene visualizzato utilizzando la funzione integrata list().

L'output che otteniamo รจ costituito da elementi distinti, dai quali vengono eliminati tutti gli elementi duplicati.

Esempio

my_list = [1,1,2,3,2,2,4,5,6,2,1]
my_final_list = set(my_list)
print(list(my_final_list))

Produzione:

[1, 2, 3, 4, 5, 6]

Metodo 2) Utilizzo dell'elenco temporaneo

Per rimuovere i duplicati da un elenco, รจ possibile utilizzare un elenco temporaneo vuoto. A tal fine, รจ necessario innanzitutto scorrere l'elenco contenente i duplicati e aggiungere gli elementi univoci all'elenco temporaneo. Later l'elenco temporaneo viene assegnato all'elenco principale.

Esempio

Ecco un esempio funzionante che utilizza un elenco temporaneo.

my_list = [1, 2, 3, 1, 2, 4, 5, 4 ,6, 2]
print("List Before ", my_list)
temp_list = []

for i in my_list:
    if i not in temp_list:
        temp_list.append(i)

my_list = temp_list

print("List After removing duplicates ", my_list)

Produzione:

List Before  [1, 2, 3, 1, 2, 4, 5, 4, 6, 2]
List After removing duplicates  [1, 2, 3, 4, 5, 6]

Metodo 3) Utilizzando Dict

Possiamo rimuovere i duplicati dall'elenco dato importando OrderedDict dalla libreria collections. รˆ disponibile da Python 2.7 in poi. OrderedDict si occupa di restituire gli elementi distinti nell'ordine in cui la chiave รจ presente.

Utilizziamo una lista e il metodo fromkeys() disponibile in OrderedDict per ottenere gli elementi univoci dalla lista.

Per utilizzare il metodo OrderedDict.fromkeys(), รจ necessario importare OrderedDict da collections, come mostrato di seguito:

from collections import OrderedDict

Ecco un esempio di come rimuovere i duplicati utilizzando il metodo OrderedDict.fromkeys().

Esempio

from collections import OrderedDict

my_list = ['a','x','a','y','a','b','b','c']

my_final_list = OrderedDict.fromkeys(my_list)

print(list(my_final_list))

Produzione:

['a', 'x', 'y', 'b', 'c']

Da Python Dalla versione 3.5 in poi, possiamo utilizzare il metodo standard dict.fromkeys() per ottenere gli elementi distinti dall'elenco. Il metodo dict.fromkeys() restituisce chiavi univoche e aiuta a eliminare i valori duplicati.

Ecco un esempio che mostra il funzionamento di dict.fromkeys() su una lista per ottenere gli elementi univoci:

Esempio

my_list = ['a','x','a','y','a','b','b','c']
my_final_list = dict.fromkeys(my_list)
print(list(my_final_list))

Produzione:

['a', 'x', 'y', 'b', 'c']

Metodo 4) Utilizzo del ciclo for

utilizzando ciclo for, esamineremo l'elenco degli elementi per rimuovere i duplicati.

Innanzitutto, inizializza l'array a vuoto, ovvero `myFinallist = []`. All'interno del ciclo `for`, aggiungi un controllo per verificare se gli elementi della lista esistono nell'array `myFinallist`. Se gli elementi non esistono, aggiungili all'array `myFinallist` utilizzando il metodo `append()`.

Pertanto, ogni volta che viene rilevato un elemento duplicato, questo sarร  giร  presente nell'array myFinallist e non verrร  inserito. Verifichiamolo ora nell'esempio seguente:

Esempio

my_list = [1,2,2,3,1,4,5,1,2,6]
myFinallist = []
for i in my_list:
    if i not in myFinallist:
myFinallist.append(i)
print(list(myFinallist))

Produzione:

[1, 2, 3, 4, 5, 6]

Metodo 5) Utilizzo della comprensione delle liste

Le comprensioni dell'elenco lo sono Python funzioni utilizzate per creare nuove sequenze (come elenchi, dizionari, ecc.) utilizzando sequenze giร  create. Ciรฒ ti aiuta a ridurre i cicli piรน lunghi e a rendere il tuo codice piรน facile da leggere e gestire.

Usiamo la comprensione delle liste per rimuovere i duplicati dalla lista fornita.

Esempio

my_list = [1,2,2,3,1,4,5,1,2,6]
my_finallist = []
[my_finallist.append(n) for n in my_list if n not in my_finallist]
print(my_finallist)

Produzione:

[1, 2, 3, 4, 5, 6]

Metodo 6) Utilizzo del metodo unique() di NumPy

Il metodo unique() del modulo NumPy puรฒ aiutarci a rimuovere i duplicati dall'elenco fornito.

Per lavorare con NumPy, รจ necessario innanzitutto importare il modulo numpy:

Passo 1) Importa il modulo NumPy

import numpy as np

Passo 2) Utilizza la tua lista con duplicati all'interno del metodo unique(). L'output viene riconvertito in una lista utilizzando il metodo tolist().

myFinalList = np.unique(my_list).tolist()

Passo 3) Infine, stampa l'elenco:

print(myFinalList)

Il codice finale con output รจ il seguente:

import numpy as np
my_list = [1,2,2,3,1,4,5,1,2,6]
myFinalList = np.unique(my_list).tolist()
print(myFinalList)

Produzione:

[1, 2, 3, 4, 5, 6]

Metodo 7) Utilizzo dei metodi Pandas

Il modulo Pandas ha un metodo unique() che ci fornirร  gli elementi univoci dall'elenco fornito.

Per lavorare con il modulo Pandas:

Passo 1) Importa il modulo Panda

import pandas as pd

Passo 2) Utilizza la tua lista con i duplicati all'interno del metodo unique():

myFinalList = pd.unique(my_list).tolist()

Passo 3) Stampa l'elenco:

print(myFinalList)

Il codice finale con output รจ il seguente:

import pandas as pd

my_list = [1,2,2,3,1,4,5,1,2,6]
myFinalList = pd.unique(my_list).tolist()
print(myFinalList)

Produzione:

[1, 2, 3, 4, 5, 6]

Metodo 8) Utilizzo di enumerate() e di comprensione delle liste

Qui utilizziamo la combinazione di list comprehension e enumerate() per rimuovere gli elementi duplicati. Enumerate restituisce un oggetto con un contatore per ogni elemento della lista. Ad esempio (0,1), (1,2) ecc. In questo caso, il primo valore รจ l'indice e il secondo valore รจ l'elemento della lista.

Ciascun elemento viene controllato per verificare se รจ giร  presente nell'elenco e, in caso affermativo, viene rimosso dall'elenco.

Esempio

my_list = [1,2,2,3,1,4,5,1,2,6]
my_finallist = [i for j, i in enumerate(my_list) if i not in my_list[:j]]
print(list(my_finallist))

Produzione:

[1, 2, 3, 4, 5, 6]

DOMANDE FREQUENTI

No. Un set รจ una collezione non ordinata, quindi set() potrebbe restituire gli elementi in un ordine diverso. Per rimuovere i duplicati mantenendo l'ordine, usa dict.fromkeys() o un ciclo che aggiunge solo gli elementi non ancora visti.

Per liste di grandi dimensioni, set() รจ il piรน veloce quando l'ordine non รจ importante perchรฉ i controlli di appartenenza sono O(1). Quando l'ordine รจ importante, list(dict.fromkeys(my_list)) รจ quasi altrettanto veloce e mantiene l'ordine di prima apparizione in un'unica riga.

I metodi `set()` e `dict.fromkeys()` richiedono elementi hashable, quindi non funzionano con liste o dizionari. รˆ possibile scorrere la lista e aggiungere gli elementi non ancora visti, oppure convertire ciascun elemento in una tupla o in una stringa JSON da utilizzare come chiave temporanea.

Utilizzare list(dict.fromkeys(my_list)). Poichรฉ Python 3.7 I dizionari mantengono l'ordine di inserimento, quindi le chiavi rimangono nell'ordine in cui sono state viste per prime. Nelle versioni precedenti, utilizzare collections.OrderedDict.fromkeys() per ottenere lo stesso risultato.

No. Metodi come `set()`, `dict.fromkeys()`, le list comprehension e `unique()` di NumPy o Pandas creano una nuova lista e lasciano invariata la sorgente. Se si desidera sovrascrivere il risultato, รจ necessario riassegnarlo alla stessa variabile.

Utilizza `numpy.unique()` o `pandas.unique()` quando i dati sono giร  presenti in array o in una Series, oppure durante l'analisi dei dati. Tieni presente che `numpy.unique()` ordina anche i valori, mentre `pandas.unique()` mantiene l'ordine di visualizzazione. Chiama `tolist()` per ottenere una semplice lista.

Le pipeline di machine learning eliminano le righe duplicate prima dell'addestramento, in modo che i campioni ripetuti non influenzino il modello o creino discrepanze tra i set di addestramento e di test. La funzione `drop_duplicates()` di Pandas รจ uno strumento comune per la pulizia dei dataset tabellari.

Sรฌ. GitHub Copilot e gli assistenti AI agentic generano codice per set(), dict.fromkeys() o deduplicazione Pandas a partire da un commento, suggeriscono l'opzione che preserva l'ordine e rifattorizzano i cicli, anche se รจ comunque consigliabile verificare i casi limite come gli elementi non hashable.

Riassumi questo post con: