Fjern duplikater i Python-lister: 5 enkle metoder!

Fjern duplikater fra lister i Python

I denne veiledningen skal vi utforske ulike metoder for å fjerne dupliserte elementer fra lister i Python. Når du arbeider med lister, kan det ofte være nødvendig å kun beholde unike elementer, og vi skal se på fem forskjellige teknikker for å oppnå dette.

Grunnleggende om Python-lister

La oss starte med en kort repetisjon av det grunnleggende om Python-lister. Lister i Python er muterbare, noe som betyr at de kan endres direkte. Du kan legge til og fjerne elementer etter behov. En viktig egenskap ved lister er at de kan inneholde duplikate elementer.

Så, hvordan sørger man for å beholde kun de unike elementene og eliminere de som gjentas? Det finnes flere måter å gjøre dette på. Du kan enten lage en helt ny liste som kun inneholder de unike elementene fra den opprinnelige listen, eller du kan velge å modifisere den eksisterende listen direkte.

I denne artikkelen skal vi gå gjennom begge disse tilnærmingene i detalj.

Metoder for å fjerne duplikater

La oss se for oss et scenario fra virkeligheten. Tenk deg at du er i en bursdagsfeiring 🎊🎉. Blant alle godbitene finner du flere elementer som forekommer mer enn en gang. La oss si at du ønsker å fjerne disse duplikatene fra listen med søtsaker.

Her er en liste med søtsaker:

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

I denne listen ser vi at «candy» og «cupcake» forekommer to ganger. Vi skal bruke denne listen som utgangspunkt for å demonstrere hvordan vi fjerner duplikatene.

Iterasjon gjennom lister for å fjerne duplikater

En enkel metode er å lage en ny liste som inneholder hvert element nøyaktig en gang. Se på koden 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']
  
  • Først oppretter vi en tom liste kalt unique_sweets.
  • Vi itererer deretter gjennom hver sweet i den opprinnelige listen sweets.
  • For hvert element sjekker vi om det allerede finnes i unique_sweets. Hvis det ikke gjør det, legger vi det til ved hjelp av .append().

Dersom vi kommer over et duplikat, som for eksempel den andre forekomsten av «candy», vil det ikke bli lagt til i unique_sweets siden betingelsen sweet not in unique_sweets da vil evaluere til False.

Denne metoden sikrer at hvert element kun forekommer én gang i unique_sweets.

Bruk av listeforståelse

Vi kan også benytte oss av listeforståelse for å fylle unique_sweets-listen.

Hvis du trenger en oppfriskning på listeforståelse, anbefaler vi å sjekke ut en egen veiledning om det.

Vi kan omskrive løkken over ved hjelp av listeforståelse i formatet: [output for item in iterable if condition is True].

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

Her legger vi til elementer i listen, men listen blir ikke fylt med selve append-operasjonen. For å fjerne duplikater, kan vi også bruke innebygde metoder, som vi skal se på i neste seksjon.

Innebygde listemetoder

Python tilbyr innebygde metoder som .count() og .remove() som kan brukes til å fjerne duplikater.

.count()-metoden, med syntaksen list.count(value), returnerer antall ganger en gitt verdi forekommer i listen. Hvis tallet er større enn 1, betyr det at elementet forekommer mer enn en gang.

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

Her er et eksempel på hvordan dette kan brukes:

    for sweet in sweets:
        if sweets.count(sweet) > 1:
            sweets.remove(sweet)

    print(sweets)
    
    # Output
    ['cake', 'lollipop', 'cheesecake', 'candy', 'cupcake']
  

Fordi .remove() kun fjerner den første forekomsten av et element, kan den ikke håndtere elementer som forekommer mer enn to ganger. Hvis et element forekommer nøyaktig to ganger, fjerner denne metoden den første forekomsten. Hvis et element forekommer K ganger, vil K-1 forekomster fortsatt være igjen.

For å løse dette, kan vi endre løkken til å fjerne alle duplikater bortsett fra én. I stedet for å bruke en enkel if-setning, kan vi bruke en while-løkke som fortsetter å fjerne duplikater inntil antallet av hvert element er 1.

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

Nå inneholder «sweets»-listen to forekomster av «cupcake» og tre av «candy».

        for sweet in sweets:
          while(sweets.count(sweet) > 1):
            sweets.remove(sweet)
            
        print(sweets)
    
        # Output
        ['cake', 'lollipop', 'cheesecake', 'candy', 'cupcake']
    

while-løkken fortsetter å kjøre så lenge antallet av et element er større enn 1. Når det bare er én forekomst igjen, hopper løkken videre til neste element. Men denne tilnærmingen med nestede løkker kan være ineffektiv for store lister, så det er lurt å vurdere de andre metodene dersom du jobber med store datasett.

Hittil har vi sett på metoder for å:

  • Lage nye lister som kun inneholder unike elementer.
  • Bruke .count() og .remove() for å endre den eksisterende listen direkte.

Det finnes visse innebygde datastrukturer i Python som krever at verdier er unike. Vi kan dra nytte av dette ved å konvertere en liste til en slik struktur, for så å konvertere den tilbake til en liste igjen. La oss se hvordan dette fungerer.

Konvertering til sett

Python-sett er samlinger av unike elementer. Det betyr at antallet elementer i et sett tilsvarer antallet unike elementer.

Du kan konvertere en iterable til et sett med syntaksen: set(iterable).

La oss konvertere sweets-listen til et sett:

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

Som vi ser, inneholder settet kun unike elementer. Legg også merke til at rekkefølgen ikke nødvendigvis er den samme som i den opprinnelige listen. Dette er fordi et sett er en uordnet samling.

Nå som vi har fjernet duplikater ved å konvertere til et sett, kan vi konvertere det tilbake til en liste:

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

Bruk av ordbøker

En Python-ordbok består av nøkkel-verdi par hvor hver nøkkel er unik.

Vi kan lage en ordbok med metoden .fromkeys() i formatet: dict.fromkeys(keys, values). keys er en obligatorisk parameter, og values er valgfritt. Hvis values ikke spesifiseres, blir alle verdiene satt til None.

La oss se hvordan det fungerer:

        dict.fromkeys(sweets)
    
        # Output
        {'cake': None, 'candy': None, 'cheesecake': None, 'cupcake': None, 'lollipop': None}
    

Nå kan vi igjen konvertere ordboken tilbake til en liste:

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

Som vi ser, har alle duplikatene blitt fjernet.

Oppsummering 👩‍🏫

Her er en oppsummering av metodene vi har sett på:

  • Bruk .append() til å legge til unike elementer i en ny liste. Listeforståelse kan også brukes.
  • Bruk .count() og .remove() for å fjerne elementer som forekommer mer enn en gang. Bruk en while-løkke for å fjerne alle duplikater bortsett fra en.
  • Konverter listen til et sett for å fjerne duplikater.
  • Bruk dict.fromkeys(list) for å fjerne duplikater.

For videre læring, sjekk ut Python-prosjekter for å øve eller lær hvordan du finner indeksen til elementer i Python-lister. Lykke til med læringen!