5 metoder for å fjerne dupliserte elementer fra Python-lister

I denne opplæringen lærer du hvordan du fjerner dupliserte elementer fra Python-lister.

Når du jobber med lister i Python, kan det hende du må jobbe med bare unike elementer i listen – ved å fjerne duplikatene.

Det er noen forskjellige måter du kan gjøre dette på. I denne opplæringen skal vi gå over fem slike teknikker.

Grunnleggende om Python-lister

La oss starte diskusjonen vår med å gå gjennom det grunnleggende om Python-lister.

Python-lister er foranderlig. Så du kan endre dem på plass ved å legge til og fjerne elementer fra listen. I tillegg er Python-lister samlinger av elementer som ikke nødvendigvis er unike.

Så hvordan beholder du bare de unike elementene og fjerner dupliserte eller gjentatte elementer?

Vel, du kan gjøre dette på noen forskjellige måter. Du kan enten opprette en ny liste som bare inneholder de unike elementene i den opprinnelige listen. Eller du kan velge å endre den opprinnelige listen på plass og fjerne de dupliserte elementene.

Vi vil lære disse i detalj i denne opplæringen.

Metoder for å fjerne duplikater fra Python-lister

La oss ta et eksempel fra den virkelige verden. Tenk deg at du er i bursdagsfesten til vennen din.🎊🎉

I samlingen av søtsaker som vises, ser du at det er noen gjenstander som gjentas. Du vil nå fjerne disse dupliserte elementene fra listen over søtsaker.

La oss lage en søtsakerliste som inneholder alle elementene i bildet ovenfor.

sweets = ["cupcake","candy","lollipop","cake","lollipop","cheesecake","candy","cupcake"]

I søtsakerlisten ovenfor gjentas elementene «godteri» og «cupcake» to ganger. La oss bruke denne eksempellisten til å fjerne de dupliserte elementene.

Iterer over Python-lister for å fjerne duplikater

Den enkleste metoden er å lage en ny liste som inneholder hvert element nøyaktig én gang.

Les gjennom kodecellen nedenfor:

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']
  • Vi initialiserer en tom liste unique_sweets.
  • Mens vi går gjennom søtsakerlisten, får vi tilgang til hver søtsak.
  • Hvis søt ikke allerede er tilstede i listen unique_sweets, legger vi den til på slutten av listen unike_sweets ved å bruke .append()-metoden.
  Hvordan få tilgang til gammel Hotmail-konto

Anta at du kommer over et gjentagende element, for eksempel den andre forekomsten av «godteri» i søtsakerlisten. Dette er ikke lagt til i unique_sweets-listen da den allerede er til stede: sweet not in unique_sweets evalueres til False for den andre forekomsten av «cupcake» og «candy».

Derfor, i denne metoden, forekommer hvert element nøyaktig én gang i listen unique_sweets – uten noen repetisjon.

Bruk listeforståelse for å fjerne duplikater

Du kan også bruke listeforståelse for å fylle ut unike_godteri-listen.

Vil du oppdatere det grunnleggende om listeforståelse?

▶️ Ta en titt på veiledningen om listeforståelse i Python.

La oss bruke listeforståelsesuttrykket: [output for item in iterable if condition is True] for å omskrive løkken ovenfor kortfattet.

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']

Selv om du oppretter en ny liste, fyller du ikke den opprettede listen med verdier. Dette er fordi utgangen er .append()-operasjonen til listen unique_sweets.

For å fjerne dupliserte elementer fra Python-lister kan du også bruke innebygde listemetoder, og vi vil dekke dette i neste avsnitt.

Bruk innebygde listemetoder for å fjerne duplikater

Du kan bruke Python-listemetodene .count() og .remove() for å fjerne dupliserte elementer.

– Med syntaksen list.count(value), returnerer .count()-metoden antall ganger verdien forekommer i listen. Så antallet som tilsvarer gjentatte elementer vil være større enn 1.

– list.remove(value) fjerner den første forekomsten av verdi fra listen.

Ved å bruke ovenstående har vi følgende kode.

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']

Siden .remove()-metoden bare fjerner den første forekomsten av en verdi, kan du ikke bruke den til å fjerne elementer som forekommer mer enn to ganger.

  • Hvis et bestemt element dupliseres (oppstår nøyaktig to ganger), fjerner denne metoden den første forekomsten.
  • Hvis et bestemt element gjentas K ganger, vil K-1-repetisjoner fortsatt være igjen etter å ha kjørt koden ovenfor.
  6 beste regnskapstilknyttede programmer for å støtte og tjene penger

Men generelt, når vi sier duplikater, refererer vi vanligvis til alle repetisjoner.

For å håndtere denne saken, kan du endre løkken ovenfor for å fjerne alle repetisjoner unntatt én. I stedet for å bruke en hvis betinget for å sjekke antallet av et bestemt element, kan du kjøre en while-løkke for å fjerne duplikasjoner gjentatte ganger til antallet av hvert element i listen er 1.

Listen godteri inneholder nå 2 repetisjoner av «cupcake» og 3 repetisjoner av «godteri».

sweets = ["cupcake","candy","lollipop","cake","lollipop","candy","cheesecake","candy","cupcake"]

Du kan bruke en while-løkke for å fjerne repetisjoner, som vist nedenfor. While-løkken fortsetter å løpe så lenge antallet søte i søtsaker er større enn 1. Når bare én forekomst gjenstår, blir tilstanden sweets.count(sweet) > 1 False, og loopen hopper til neste element.

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']

Men å bruke nestede løkker er kanskje ikke veldig effektivt, så du kan vurdere å bruke en av de andre teknikkene som er diskutert hvis du jobber med store lister.

Så langt har vi lært følgende:

  • Metoder for å fjerne dupliserte elementer fra Python-lister – ved å lage nye lister – som bare inneholder unike elementer
  • Innebygde listemetoder .count() og .remove() for å endre listen på plass

Det er noen innebygde Python-datastrukturer som krever at verdiene er unike – uten repetisjon. Derfor kan vi kaste en Python-liste til en av disse datastrukturene for å fjerne duplikater. Og konverter dem tilbake til en liste. Vi lærer hvordan du gjør dette i de kommende delene.

Kast Python List inn i et sett for å fjerne duplikater

Python-sett er samlinger av elementer som alle er unike. Derfor er antallet elementer som er tilstede i settet (gitt av len() lik antallet unike elementer som er til stede.

Du kan caste hvilken som helst Python iterable inn i et sett ved å bruke syntaksen: set(iterable).

  Bør du slå den på eller av?

La oss nå kaste listen søtsaker inn i et sett og undersøke resultatet.

set(sweets)
# Output
{'cake', 'candy', 'cheesecake', 'cupcake', 'lollipop'}

Fra utdataene i kodecellen ovenfor ser vi at hvert element vises nøyaktig én gang, og duplikatene er fjernet.

Legg også merke til at rekkefølgen på varer ikke nødvendigvis er den samme som rekkefølgen i den originale søtsaker. Dette er fordi, i tillegg til å være en samling unike elementer, er et Python-settobjekt en uordnet samling.

Nå som vi har fjernet duplikatene ved å kaste listen til et sett, kan vi igjen konvertere den til en liste, som vist nedenfor.

unique_sweets = list(set(sweets))
print(unique_sweets)

# Output
['cake', 'cheesecake', 'candy', 'cupcake', 'lollipop']

Bruk listeelementer som ordboknøkler for å fjerne duplikater

Python-ordboken er en samling nøkkelverdi-par der nøklene identifiserer verdiene unikt.

Du kan lage en Python-ordbok ved å bruke .fromkeys()-metoden med syntaksen: dict.fromkeys(keys, values). Her er nøkler og verdier iterables som inneholder henholdsvis nøklene og verdiene til ordboken.

  • keys er en påkrevd parameter, og den kan være en hvilken som helst Python iterabel som tilsvarer nøklene til ordboken.
  • verdier er en valgfri parameter. Hvis du ikke spesifiserer verdiene som kan gjentas, brukes standardverdien Ingen.

Uten å spesifisere verdiene, returnerer dict.fromkeys(sweets) en Python-ordbok der verdiene er satt til Ingen – standardverdien. Kodecellen nedenfor forklarer dette.

dict.fromkeys(sweets)

# Output
{'cake': None,
 'candy': None,
 'cheesecake': None,
 'cupcake': None,
 'lollipop': None}

Som med forrige seksjon, kan vi igjen konvertere ordboken til en liste, som vist nedenfor.

unique_sweets = list(dict.fromkeys(sweets))
print(unique_sweets)
# Output
['cupcake', 'candy', 'lollipop', 'cake', 'cheesecake']

Fra utgangen ovenfor kan vi se at de dupliserte elementene er fjernet fra listen søtsaker.

Oppsummering👩‍🏫

Her er en oppsummering av de forskjellige metodene du kan bruke for å fjerne dupliserte elementer eller repetisjoner fra Python-lister.

  • Bruk Python-listemetoden .append() for å legge til elementer som ikke gjentar seg i en ny liste. Den nye listen inneholder hvert element i den opprinnelige listen nøyaktig én gang og fjerner alle repetisjoner. Du kan også gjøre dette ved å bruke listeforståelse.
  • Bruk innebygde .count()- og .remove()-metoder for å fjerne elementer som forekommer nøyaktig to ganger. Det samme kan plasseres i en while-løkke for å fjerne alle ekstra forekomster.
  • Kast en Python-liste inn i et sett for å beholde bare de unike elementene.
  • Bruk dict.fromkeys(list) for å fjerne eventuelle duplikater fra listen, da det ikke skal være repetisjonsnøkler i ordboken.

Deretter kan du sjekke ut Python-prosjekter for å øve og lære. Eller lær hvordan du finner indeksen til et element i Python-lister. God læring!