5 metoder til at fjerne duplikerede elementer fra Python-lister

I denne vejledning lærer du, hvordan du fjerner duplikerede elementer fra Python-lister.

Når du arbejder med lister i Python, skal du nogle gange kun arbejde med unikke elementer på listen – ved at fjerne dubletterne.

Der er et par forskellige måder, du kan gøre dette på. I denne tutorial vil vi gennemgå fem sådanne teknikker.

Grundlæggende om Python-lister

Lad os starte vores diskussion ved at gennemgå det grundlæggende i Python-lister.

Python-lister er foranderlig. Så du kan ændre dem på plads ved at tilføje og fjerne elementer fra listen. Derudover er Python-lister samlinger af elementer, der ikke nødvendigvis er unikke.

Så hvordan bevarer du kun de unikke elementer og fjerner de duplikerede eller gentagne elementer?

Nå, du kan gøre dette på et par forskellige måder. Du kan enten oprette en ny liste, der kun indeholder de unikke elementer i den oprindelige liste. Eller du kan vælge at ændre den originale liste på plads og fjerne de duplikerede elementer.

Vi vil lære dem i detaljer i denne tutorial.

Metoder til at fjerne dubletter fra Python-lister

Lad os tage et eksempel fra den virkelige verden. Antag, at du er til din vens fødselsdagsfest.🎊🎉

I den viste samling af slik ser du, at der er nogle genstande, der gentages. Du vil nu gerne fjerne disse dubletter fra listen over slik.

Lad os oprette en slikliste, der indeholder alle elementerne på billedet ovenfor.

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

I ovenstående slikliste gentages emnerne ‘slik’ og ‘cupcake’ to gange. Lad os bruge denne eksempelliste til at fjerne de duplikerede elementer.

Gentag over Python-lister for at fjerne dubletter

Den mest ligetil metode er at oprette en ny liste, der indeholder hvert element nøjagtigt én gang.

Læs 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 gennem sliklisten, får vi adgang til hver sød.
  • Hvis sød ikke allerede er til stede i listen unique_sweets, føjer vi den til slutningen af ​​listen unique_sweets ved hjælp af .append() metoden.
  Sådan udtrækkes og ændres ikoner på en Mac

Antag, at du støder på en gentagelse, for eksempel den anden forekomst af ‘slik’ på sliklisten. Dette er ikke føjet til listen over unikke_slik, da det allerede er til stede: sødt, ikke i unikt_slik, evalueres til Falsk for anden forekomst af ‘cupcake’ og ‘slik’.

Derfor, i denne metode, forekommer hvert element nøjagtigt én gang på listen unique_sweets – uden nogen gentagelse.

Brug listeforståelse til at fjerne dubletter

Du kan også bruge listeforståelse til at udfylde listen unique_sweets.

Vil du genopfriske det grundlæggende i listeforståelse?

▶️ Tjek selvstudiet om listeforståelse i Python.

Lad os bruge listeforståelsesudtrykket: [output for item in iterable if condition is True] at omskrive ovenstående looping 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']

Selvom du opretter en ny liste, udfylder du ikke den oprettede liste med værdier. Dette skyldes, at outputtet er .append()-operationen til listen unique_sweets.

For at fjerne duplikerede elementer fra Python-lister kan du også bruge indbyggede listemetoder, og vi vil dække dette i næste afsnit.

Brug indbyggede listemetoder til at fjerne dubletter

Du kan bruge Python-listemetoderne .count() og .remove() til at fjerne duplikerede elementer.

– Med syntaksen list.count(value) returnerer .count()-metoden det antal gange, værdien forekommer i listen. Så antallet, der svarer til gentagne elementer, vil være større end 1.

– list.remove(value) fjerner den første forekomst af værdi fra listen.

Ved at bruge 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']

Da metoden .remove() kun fjerner den første forekomst af en værdi, kan du ikke bruge den til at fjerne elementer, der forekommer mere end to gange.

  • Hvis et bestemt element er duplikeret (forekommer nøjagtigt to gange), fjerner denne metode den første forekomst.
  • Hvis et bestemt emne gentages K gange, vil K-1 gentagelser stadig forblive efter at have kørt ovenstående kode.
  Få tilføjelsen til navneordsprojektet til Photoshop, Illustrator og InDesign

Men generelt, når vi siger dubletter, henviser vi normalt til alle gentagelser.

For at håndtere denne sag kan du ændre ovenstående løkke for at fjerne alle gentagelser undtagen én. I stedet for at bruge en hvis betinget til at kontrollere antallet af et bestemt element, kan du køre en while-løkke for gentagne gange at fjerne duplikationer, indtil antallet af hvert element på listen er 1.

Listen slik indeholder nu 2 gentagelser af ‘cupcake’ og 3 gentagelser af ‘slik’.

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

Du kan bruge en while-løkke til at fjerne gentagelser, som vist nedenfor. While-løkken fortsætter med at køre, så længe antallet af sødt i slik er større end 1. Når der kun er én forekomst tilbage, bliver betingelsen sweets.count(sweet) > 1 False, og løkken springer til næste punkt.

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 det er måske ikke særlig effektivt at bruge indlejrede løkker, så du kan overveje at bruge en af ​​de andre teknikker, der er beskrevet, hvis du arbejder med store lister.

Indtil videre har vi lært følgende:

  • Metoder til at fjerne duplikerede elementer fra Python-lister – ved at oprette nye lister – der kun indeholder unikke elementer
  • Indbyggede listemetoder .count() og .remove() for at ændre listen på plads

Der er nogle indbyggede Python-datastrukturer, der kræver, at værdierne alle er unikke – uden gentagelser. Derfor kan vi caste en Python-liste til en af ​​disse datastrukturer for at fjerne dubletter. Og konverter dem derefter tilbage til en liste. Vi lærer, hvordan du gør dette i de kommende afsnit.

Kast Python List ind i et sæt for at fjerne dubletter

Python-sæt er samlinger af elementer, der alle er unikke. Derfor er antallet af elementer til stede i sættet (givet af len() lig med antallet af unikke elementer, der er til stede.

Du kan caste enhver iterable Python ind i et sæt ved hjælp af syntaksen: set(iterable).

  Sådan konfigureres Face ID på iPhone X

Lad os nu kaste listen over slik i et sæt og undersøge outputtet.

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

Fra outputtet i ovenstående kodecelle ser vi, at hvert element vises nøjagtigt én gang, og dubletterne er blevet fjernet.

Bemærk også, at rækkefølgen af ​​varer ikke nødvendigvis er den samme som deres rækkefølge i den originale slikliste. Dette skyldes, at udover at være en samling af unikke elementer, er et Python-sætobjekt en uordnet samling.

Nu hvor vi har fjernet dubletterne ved at støbe listen til et sæt, kan vi igen konvertere den til en liste, som vist nedenfor.

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

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

Brug listeelementer som ordbogsnøgler til at fjerne dubletter

Python-ordbogen er en samling af nøgleværdi-par, hvor nøglerne unikt identificerer værdierne.

Du kan oprette en Python-ordbog ved hjælp af .fromkeys()-metoden med syntaksen: dict.fromkeys(keys, values). Her er nøgler og værdier iterables, der indeholder henholdsvis ordbogens nøgler og værdier.

  • keys er en påkrævet parameter, og den kan være en hvilken som helst Python iterable svarende til nøglerne i ordbogen.
  • værdier er en valgfri parameter. Hvis du ikke angiver de gentagelige værdier, bruges standardværdien Ingen.

Uden at angive værdierne returnerer dict.fromkeys(sweets) en Python-ordbog, hvor værdierne er sat til Ingen – standardværdien. Kodecellen nedenfor forklarer dette.

dict.fromkeys(sweets)

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

Som med det foregående afsnit kan vi igen konvertere ordbogen til en liste, som vist nedenfor.

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

Fra output ovenfor kan vi se, at de duplikerede elementer er blevet fjernet fra listen slik.

Opsummering👩‍🏫

Her er en opsummering af de forskellige metoder, du kan bruge til at fjerne duplikerede elementer eller gentagelser fra Python-lister.

  • Brug Python-listemetoden .append() til at tilføje ikke-gentagende elementer til en ny liste. Den nye liste indeholder hvert punkt på den originale liste præcis én gang og fjerner alle gentagelser. Du kan også gøre dette ved at bruge listeforståelse.
  • Brug indbyggede .count()- og .remove()-metoder til at fjerne elementer, der forekommer præcis to gange. Det samme kan placeres i en while-løkke for at fjerne alle yderligere forekomster.
  • Kast en Python-liste ind i et sæt for kun at beholde de unikke elementer.
  • Brug dict.fromkeys(list) til at fjerne eventuelle dubletter fra listen, da der ikke burde være nogen gentagelsesnøgler i ordbogen.

Tjek derefter Python-projekter for at øve og lære. Eller lær, hvordan du finder indekset for et element i Python-lister. God læring!