U ovom uputstvu istražićemo različite načine za eliminisanje dupliranih stavki iz Python lista.
Kada radite sa listama u Pythonu, često se dešava da je neophodno raditi isključivo sa jedinstvenim elementima, što znači da morate ukloniti sve duplikate.
Postoji više tehnika koje se mogu koristiti za postizanje ovog cilja. U ovom vodiču, analiziraćemo pet različitih pristupa.
Osnove Python Lista
Započnimo naše izlaganje sa osnovnim karakteristikama Python lista.
Python liste su promenljive. To znači da ih možete modifikovati direktno, dodavanjem ili uklanjanjem elemenata. Pored toga, Python liste mogu sadržati elemente koji nisu jedinstveni, odnosno mogu se ponavljati.
Dakle, kako osigurati da lista sadrži samo jedinstvene elemente i kako ukloniti sve duplikate?
Postoji nekoliko načina za to. Možete kreirati novu listu koja sadrži samo jedinstvene elemente originalne liste. Alternativno, možete direktno modifikovati originalnu listu, uklanjajući duplirane stavke.
Ove metode ćemo detaljno razmotriti u ovom uputstvu.
Metode za uklanjanje duplikata iz Python lista
Uzmimo primer iz svakodnevnog života. Zamislite da ste na rođendanskoj proslavi vašeg prijatelja. 🎊🎉
Među slatkišima, primetićete da se neki od njih ponavljaju. Želite da uklonite te duplikate sa liste slatkiša.
Napravimo listu slatkiša koja sadrži sve artikle sa slike.
sweets = ["cupcake","candy","lollipop","cake","lollipop","cheesecake","candy","cupcake"]
U ovoj listi, stavke ‘candy’ i ‘cupcake’ se ponavljaju po dva puta. Iskoristimo ovu listu kao primer za uklanjanje dupliranih stavki.
Iteracija kroz Python liste za uklanjanje duplikata
Najjednostavniji način je da kreirate novu listu koja sadrži svaku stavku tačno jednom.
Pogledajte sledeći kod:
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']
- Inicijalizujemo praznu listu pod nazivom
unique_sweets
. - Prolazimo kroz listu
sweets
, pristupajući svakom slatkišu pojedinačno. - Ako slatkiš već ne postoji u listi
unique_sweets
, dodajemo ga na kraj liste pomoću metode.append()
.
Ako naiđete na stavku koja se ponavlja, na primer, drugi put na ‘candy’ u listi sweets
, ona neće biti dodata u listu unique_sweets
, jer je već prisutna: uslov sweet not in unique_sweets
će biti False
za svako drugo pojavljivanje ‘cupcake’ i ‘candy’.
Stoga, u ovom metodu, svaka stavka se pojavljuje tačno jednom u listi unique_sweets
— bez ponavljanja.
Korišćenje list comprehension za uklanjanje duplikata
Takođe možete upotrebiti list comprehension za popunjavanje liste unique_sweets
.
Da li želite da osvežite svoje znanje o list comprehension?
▶ Pogledajte vodič o list comprehension u Pythonu.
Upotrebimo izraz za list comprehension: [output for item in iterable if condition is True]
da prepišemo gornju petlju na sažetiji način.
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']
Iako kreirate novu listu, ne popunjavate kreiranu listu vrednostima direktno. To je zato što je izlaz operacija .append()
na listu unique_sweets
.
Za uklanjanje dupliranih stavki iz Python listi, možete koristiti i ugrađene metode liste, što ćemo objasniti u narednom delu.
Upotreba ugrađenih metoda liste za uklanjanje duplikata
Možete koristiti Python metode liste .count()
i .remove()
za uklanjanje dupliranih stavki.
– Sa sintaksom lista.count(value)
, metoda .count()
vraća koliko puta se data vrednost pojavljuje u listi. Dakle, broj koji odgovara stavkama koje se ponavljaju biće veći od 1.
– lista.remove(value)
uklanja prvo pojavljivanje date vrednosti sa liste.
Koristeći gore navedeno, imamo sledeći kod.
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']
Pošto metoda .remove()
uklanja samo prvo pojavljivanje vrednosti, ne možete je koristiti za uklanjanje stavki koje se pojavljuju više od dva puta.
- Ako je određena stavka duplirana (pojavljuje se tačno dva puta), ova metoda uklanja prvo pojavljivanje.
- Ako se određena stavka ponovi K puta, onda nakon pokretanja gornjeg koda, K-1 ponavljanja će i dalje ostati.
Ali generalno, kada kažemo duplikati, obično mislimo na sva ponavljanja.
Da biste rešili ovaj problem, možete izmeniti gornju petlju da biste uklonili sva ponavljanja osim jednog. Umesto da koristite uslov if
za proveru broja određenih stavki, možete koristiti while
petlju da biste više puta uklanjali duplikate sve dok broj svake stavke na listi ne bude 1.
Lista slatkiša sada sadrži 2 ponavljanja ‘cupcake’ i 3 ponavljanja ‘candy’.
sweets = ["cupcake","candy","lollipop","cake","lollipop","candy","cheesecake","candy","cupcake"]
Možete koristiti while
petlju da uklonite ponavljanja, kao što je prikazano u nastavku. Petlja se nastavlja sve dok je broj slatkiša u listi sweets
veći od 1. Kada ostane samo jedno pojavljivanje, uslov sweets.count(sweet) > 1
postaje False
, a petlja prelazi na sledeću stavku.
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']
Međutim, upotreba ugnježdenih petlji možda nije najefikasnija, tako da treba razmisliti o drugim tehnikama ukoliko radite sa velikim listama.
Do sada smo naučili sledeće:
- Metode za uklanjanje duplikata iz Python lista kreiranjem novih listi koje sadrže samo jedinstvene stavke.
- Ugrađene metode liste
.count()
i.remove()
za izmenu liste direktno.
Postoje neke ugrađene strukture podataka u Pythonu koje zahtevaju da sve vrednosti budu jedinstvene – bez ponavljanja. Zbog toga možemo prebaciti Python listu u jednu od ovih struktura podataka kako bismo uklonili duplikate, a zatim ih ponovo prebaciti u listu. Naučićemo kako to da uradimo u narednim odeljcima.
Prebacivanje Python liste u skup za uklanjanje duplikata
Python skupovi su kolekcije elemenata koji su svi jedinstveni. Stoga, broj stavki prisutnih u skupu (dat sa len(set_obj)
) jednak je broju prisutnih jedinstvenih elemenata.
Možete prebaciti bilo koji Python iterable u skup koristeći sintaksu: set(iterable)
.
Sada, pretvorimo listu slatkiša u skup i analizirajmo rezultat.
set(sweets) # Output {'cake', 'candy', 'cheesecake', 'cupcake', 'lollipop'}
Iz izlaza u gornjoj liniji koda vidimo da se svaka stavka pojavljuje tačno jednom, a duplikati su uklonjeni.
Takođe, primetite da redosled stavki nije nužno isti kao njihov redosled u originalnoj listi slatkiša. To je zato što je Python skup objekat neuređena kolekcija, pored toga što je kolekcija jedinstvenih elemenata.
Sada kada smo uklonili duplikate pretvaranjem liste u skup, možemo je ponovo prebaciti u listu, kao što je prikazano ispod.
unique_sweets = list(set(sweets)) print(unique_sweets) # Output ['cake', 'cheesecake', 'candy', 'cupcake', 'lollipop']
Korišćenje stavki liste kao ključeva rečnika za uklanjanje duplikata
Python rečnik je kolekcija parova ključ/vrednost, gde ključevi jedinstveno identifikuju vrednosti.
Možete kreirati Python rečnik pomoću metode .fromkeys()
sa sintaksom: dict.fromkeys(keys, values)
. Ovde su keys
i values
iterabili koji sadrže ključeve i vrednosti rečnika, respektivno.
keys
je obavezan parametar i može biti bilo koji Python iterable koji odgovara ključevima rečnika.values
je opcioni parametar. Ako ne navedete iterable vrednosti, koristi se podrazumevana vrednostNone
.
Bez navođenja vrednosti, dict.fromkeys(sweets)
vraća Python rečnik gde su vrednosti postavljene na None
– podrazumevana vrednost. Sledeći kod objašnjava ovo.
dict.fromkeys(sweets) # Output {'cake': None, 'candy': None, 'cheesecake': None, 'cupcake': None, 'lollipop': None}
Kao i u prethodnom odeljku, ponovo možemo da konvertujemo rečnik u listu, kao što je prikazano ispod.
unique_sweets = list(dict.fromkeys(sweets)) print(unique_sweets) # Output ['cupcake', 'candy', 'lollipop', 'cake', 'cheesecake']
Iz gornjeg izlaza možemo videti da su duplikati uklonjeni sa liste slatkiša.
Zaključak 👩🏫
Evo rezimea različitih metoda koje možete koristiti za uklanjanje duplikata ili ponavljanja iz Python lista.
- Koristite Python metodu liste
.append()
da dodate stavke koje se ne ponavljaju na novu listu. Nova lista sadrži svaku stavku na originalnoj listi tačno jednom i uklanja sva ponavljanja. To možete uraditi i pomoću list comprehension. - Koristite ugrađene metode
.count()
i.remove()
da biste uklonili stavke koje se pojavljuju tačno dva puta. Isto se može staviti uwhile
petlju da se uklone sva dodatna pojavljivanja. - Prebacite Python listu u skup da biste zadržali samo jedinstvene elemente.
- Koristite
dict.fromkeys(list)
da uklonite sve duplikate sa liste, jer ne bi trebalo da postoje ključevi za ponavljanje rečnika.
Zatim pogledajte Python projekte za vežbanje i učenje. Ili naučite kako da pronađete indeks stavke na Python listama. Srećno učenje!