Kako ukloniti duplikate s popisa u Python

⚡ Pametni sažetak

Uklanjanje duplikata iz Python Popis se može napraviti s nekoliko ugrađenih pristupa, uključujući set(), dict.fromkeys(), petlje, razumijevanje popisa i metode biblioteka iz NumPy-a i Pandasa, pri čemu svaki balansira očuvanje redoslijeda s brzinom.

  • 🔘 Metoda postavljanja: set() odmah vraća različite elemente, ali ne čuva izvorni redoslijed liste.
  • ☑️ Sačuvana narudžba: dict.fromkeys() i OrderedDict uklanjaju duplikate dok keeping prvi viđeni redoslijed umetanja.
  • ✅ Ručno upravljanje: Razumijevanje for-petlje ili liste s provjerom članstva održava red i ostaje čitljivo.
  • 🧪 Metode biblioteke: NumPy unique() i Pandas unique() dedupliciraju podatke i vraćaju izlaz liste putem metode tolist().
  • 🛠️ Granica hašabilnosti: Ključevi set i dict zahtijevaju hashirane elemente, pa liste ili rječnici trebaju pristup temeljen na petlji.
  • 🤖 Tijekovi rada umjetne inteligencije: Cjevovodi strojnog učenja dedupliciraju podatke o obuci pomoću Pandas drop_duplicates() kako bi se spriječila pristranost i curenje podataka.

Uklanjanje duplikata s popisa u Python

Python uklonite duplikate s popisa

Popis je spremnik koji sadrži različite Python objekti, koji mogu biti cijeli brojevi, riječi, vrijednosti itd. To je ekvivalent nizu u drugim programskim jezicima.

Dakle, ovdje ćemo proći kroz različite načine na koje možemo ukloniti duplikate s određenog popisa u Python.

Metoda 1) Uklonite duplikate s popisa pomoću Seta

Za uklanjanje duplikata s popisa možete upotrijebiti ugrađenu funkciju set(). Posebnost metode set() je u tome što vraća različite elemente.

Imamo listu: [1,1,2,3,2,2,4,5,6,2,1]. Lista ima mnogo duplikata koje trebamo ukloniti i vratiti samo različite elemente. Lista je predana ugrađenoj funkciji set(). Later Konačni popis prikazuje se pomoću ugrađene funkcije list().

Izlaz koji dobivamo su različiti elementi gdje su svi duplicirani elementi eliminirani.

Primjer

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

Izlaz:

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

Metoda 2) Korištenje privremenog popisa

Za uklanjanje duplikata s određenog popisa možete upotrijebiti prazan privremeni popis. Za to ćete prvo morati proći kroz popis koji sadrži duplikate i dodati jedinstvene stavke na privremeni popis. Later privremena lista se dodjeljuje glavnoj listi.

Primjer

Evo radnog primjera korištenja privremenog popisa.

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)

Izlaz:

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

Metoda 3) Korištenje Dict

Duplikate možemo ukloniti s danog popisa uvozom OrderedDicta iz kolekcija. Dostupan je od python2.7 nadalje. OrderedDict se brine o vraćanju različitih elemenata redoslijedom kojim je ključ prisutan.

Koristimo listu i metodu fromkeys() dostupnu u OrderedDictu kako bismo dobili jedinstvene elemente s liste.

Za korištenje metode OrderedDict.fromkeys(), morate uvesti OrderedDict iz kolekcija, kao što je prikazano u nastavku:

from collections import OrderedDict

Evo primjera za uklanjanje duplikata pomoću metode OrderedDict.fromkeys().

Primjer

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))

Izlaz:

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

Od Python Od verzije 3.5 nadalje, možemo koristiti redovnu metodu dict.fromkeys() za dobivanje različitih elemenata s popisa. Metoda dict.fromkeys() vraća jedinstvene ključeve i pomaže u uklanjanju dupliciranih vrijednosti.

Primjer koji pokazuje rad funkcije dict.fromkeys() na popisu za dobivanje jedinstvenih stavki je sljedeći:

Primjer

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

Izlaz:

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

Metoda 4) Korištenje for-petlje

Korištenje for-petlja, proći ćemo popis stavki kako bismo uklonili duplikate.

Prvo inicijalizirajte niz da bude prazan, tj. myFinallist = []. Unutar for-petlje dodajte provjeru postoje li stavke s popisa u nizu myFinallist. Ako stavke ne postoje, dodajte stavku u niz myFinallist pomoću metode append().

Dakle, kad god se naiđe na dupliciranu stavku, ona će već biti prisutna u nizu myFinallist i neće biti umetnuta. Provjerimo sada isto u primjeru u nastavku:

Primjer

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))

Izlaz:

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

Metoda 5) Korištenje razumijevanja popisa

Popis shvaćanja su Python funkcije koje se koriste za stvaranje novih sekvenci (kao što su popisi, rječnici itd.) koristeći sekvence koje su već stvorene. To vam pomaže smanjiti dulje petlje i učiniti vaš kod lakšim za čitanje i održavanje.

Iskoristimo razumijevanje popisa za uklanjanje duplikata s danog popisa.

Primjer

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)

Izlaz:

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

Metoda 6) Korištenje metode NumPy unique()

Metoda unique() iz NumPy modula može nam pomoći ukloniti duplikate s danog popisa.

Za rad s NumPy-jem, prvo uvezite numpy modul:

Korak 1) Uvoz NumPy modula

import numpy as np

Korak 2) Koristite svoju listu s duplikatima unutar metode unique(). Izlaz se pretvara natrag u listu pomoću metode tolist().

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

Korak 3) Na kraju ispišite popis:

print(myFinalList)

Konačni kod s izlazom je sljedeći:

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

Izlaz:

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

Metoda 7) Korištenje Pandas metoda

Modul Pandas ima metodu unique() koja će nam dati jedinstvene elemente s danog popisa.

Za rad s Pandas modulom:

Korak 1) Uvoz Pandas modula

import pandas as pd

Korak 2) Koristite svoju listu s duplikatima unutar metode unique():

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

Korak 3) Ispis popisa:

print(myFinalList)

Konačni kod s izlazom je sljedeći:

import pandas as pd

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

Izlaz:

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

Metoda 8) Korištenje enumerate() i razumijevanja popisa

Ovdje koristimo kombinaciju popisnog razumijevanja i enumerate() za uklanjanje dupliciranih elemenata. Enumerate vraća objekt s brojačem za svaki element na popisu. Na primjer (0,1), (1,2) itd. Ovdje je prva vrijednost indeks, a druga vrijednost stavka popisa.

Za svaki element se provjerava postoji li na popisu, a ako postoji, uklanja se s popisa.

Primjer

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))

Izlaz:

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

Pitanja i odgovori

Ne. Skup je neuređena kolekcija, pa set() može vratiti elemente u drugom redoslijedu. Za uklanjanje duplikata uz očuvanje redoslijeda, upotrijebite dict.fromkeys() ili petlju koja dodaje samo elemente koji već nisu viđeni.

Za velike liste, set() je najbrži kada redoslijed nije bitan jer su provjere članstva O(1). Kada je redoslijed bitan, list(dict.fromkeys(my_list)) je gotovo jednako brz i zadržava redoslijed prvog viđenog u jednom retku.

set() i dict.fromkeys() trebaju hashirane elemente, pa ne uspijevaju na listama ili rječnicima. Prođite kroz listu i dodajte stavke koje već nisu viđene ili pretvorite svaku stavku u tuple ili JSON niz kao privremeni ključ.

Koristite list(dict.fromkeys(my_list)). Budući da Python Rječnici verzije 3.7 čuvaju redoslijed umetanja, tako da ključevi ostaju u redoslijedu prvog viđenja. U starijim verzijama koristite collections.OrderedDict.fromkeys() za isti rezultat.

Ne. Metode poput set(), dict.fromkeys(), comprehensions i NumPy ili Pandas unique() grade novu listu i ostavljaju izvor nepromijenjenim. Ponovno dodijelite rezultat istoj varijabli ako je želite prebrisati.

Koristite numpy.unique() ili pandas.unique() kada se podaci već nalaze u nizovima ili serijama ili tijekom analize podataka. Imajte na umu da numpy.unique() također sortira vrijednosti, dok pandas.unique() zadržava redoslijed prvog viđenja. Pozovite tolist() za običnu listu.

Cjevovodi strojnog učenja odbacuju duplicirane retke prije treniranja kako ponovljeni uzorci ne bi pristrasno mijenjali model ili uzrokovali curenje podataka između skupova treniranja i testiranja. Pandas drop_duplicates() je uobičajeni alat za čišćenje tabličnih skupova podataka.

Da. GitHub Copilot i agentski AI asistenti generiraju set(), dict.fromkeys() ili Pandas kod za deduplikaciju iz komentara, predlažu opciju očuvanja redoslijeda i refaktoriraju petlje, iako biste i dalje trebali provjeravati rubne slučajeve poput stavki koje se ne mogu raspršiti.

Sažmite ovu objavu uz: