5 metoder för att ta bort dubbletter från Python-listor

I den här handledningen kommer du att lära dig hur du tar bort dubbletter från Python-listor.

När du arbetar med listor i Python kan du ibland behöva arbeta med endast unika objekt i listan – genom att ta bort dubbletterna.

Det finns några olika sätt du kan göra detta. I den här handledningen kommer vi att gå över fem sådana tekniker.

Grunderna i Python-listor

Låt oss börja vår diskussion med att granska grunderna i Python-listor.

Python listor är föränderlig. Så du kan ändra dem på plats genom att lägga till och ta bort element från listan. Dessutom är Python-listor samlingar av element som inte nödvändigtvis är unika.

Så hur behåller du bara de unika elementen och tar bort de dubbletter eller upprepande element?

Tja, du kan göra detta på några olika sätt. Du kan antingen skapa en ny lista som bara innehåller de unika elementen i den ursprungliga listan. Eller så kan du välja att ändra den ursprungliga listan på plats och ta bort dubblettobjekten.

Vi kommer att lära oss dessa i detalj i denna handledning.

Metoder för att ta bort dubbletter från Python-listor

Låt oss ta ett exempel från verkligheten. Anta att du är på din väns födelsedagsfest.🎊🎉

I samlingen av godis som visas ser du att det finns några föremål som upprepas. Du vill nu ta bort dessa dubbletter från listan över godis.

Låt oss skapa en godislista som innehåller alla föremålen i bilden ovan.

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

I godislistan ovan upprepas varornas godis och cupcake två gånger. Låt oss använda den här exempellistan för att ta bort dubblettobjekten.

Iterera över Python-listor för att ta bort dubbletter

Den enklaste metoden är att skapa en ny lista som innehåller varje objekt exakt en gång.

Läs igenom kodcellen nedan:

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 initierar en tom lista unique_sweets.
  • Medan vi går igenom godislistan kommer vi åt varje sötsak.
  • Om sweet inte redan finns i unique_sweets-listan lägger vi till det i slutet av unique_sweets-listan med .append()-metoden.

Anta att du stöter på ett återkommande objekt, till exempel den andra förekomsten av ”godis” i godislistan. Detta läggs inte till i listan unique_sweets eftersom det redan finns: sweet not in unique_sweets utvärderas till False för den andra förekomsten av ”cupcake” och ”godis”.

Därför, i den här metoden, förekommer varje objekt exakt en gång i listan unika_godis – utan någon upprepning.

Använd Listförståelse för att ta bort dubbletter

Du kan också använda listförståelse för att fylla i listan unika_godis.

Vill du uppdatera grunderna för listförståelse?

▶️ Kolla in handledningen om listförståelse i Python.

Låt oss använda uttrycket för listförståelse: [output for item in iterable if condition is True] att skriva om ovanstående looping kortfattat.

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

Även om du skapar en ny lista, fyller du inte den skapade listan med värden. Detta beror på att utdata är .append()-operationen till listan unique_sweets.

För att ta bort dubbletter från Python-listor kan du också använda inbyggda listmetoder, och vi kommer att ta upp detta i nästa avsnitt.

Använd inbyggda listmetoder för att ta bort dubbletter

Du kan använda Python-listmetoderna .count() och .remove() för att ta bort dubbletter av objekt.

– Med syntaxen list.count(value) returnerar .count()-metoden antalet gånger värdet förekommer i lista. Så antalet som motsvarar upprepade objekt kommer att vara större än 1.

– list.remove(value) tar bort den första förekomsten av värde från listan.

Med hjälp av ovanstående har vi följande 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']

Eftersom metoden .remove() bara tar bort den första förekomsten av ett värde, kan du inte använda den för att ta bort objekt som förekommer mer än två gånger.

  • Om ett visst objekt dupliceras (förekommer exakt två gånger), tar den här metoden bort den första förekomsten.
  • Om ett visst objekt upprepas K gånger, kommer K-1-repetitioner fortfarande att finnas kvar efter att ha kört ovanstående kod.

Men i allmänhet, när vi säger dubbletter, hänvisar vi vanligtvis till alla upprepningar.

För att hantera det här fallet kan du modifiera slingan ovan för att ta bort alla repetitioner utom en. Istället för att använda en om villkorad för att kontrollera antalet av ett visst objekt, kan du köra en while-loop för att upprepade gånger ta bort dubbletter tills antalet av varje objekt i listan är 1.

Godislistan innehåller nu 2 repetitioner av ’cupcake’ och 3 repetitioner av ’godis’.

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

Du kan använda en while-loop för att ta bort repetitioner, som visas nedan. While-slingan fortsätter att köras så länge som antalet sötsaker i godis är större än 1. När endast en förekomst återstår, blir villkoret sweets.count(sweet) > 1 False, och loopen hoppar till nästa objekt.

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 att använda kapslade loopar kanske inte är särskilt effektivt, så du kan överväga att använda någon av de andra teknikerna som diskuteras om du arbetar med stora listor.

Hittills har vi lärt oss följande:

  • Metoder för att ta bort dubbletter från Python-listor – genom att skapa nya listor – som endast innehåller unika objekt
  • Inbyggda listmetoder .count() och .remove() för att ändra listan på plats

Det finns några inbyggda Python-datastrukturer som kräver att alla värden är unika – utan upprepning. Därför kan vi casta en Python-lista till en av dessa datastrukturer för att ta bort dubbletter. Och konvertera dem sedan tillbaka till en lista. Vi kommer att lära oss hur du gör detta i de kommande avsnitten.

Kasta Python List till en uppsättning för att ta bort dubbletter

Python-uppsättningar är samlingar av element som alla är unika. Därför är antalet objekt som finns i uppsättningen (givet av len() lika med antalet unika element som finns.

Du kan casta vilken som helst Python iterable till en uppsättning med hjälp av syntaxen: set(iterable).

Nu, låt oss kasta godislistan i en uppsättning och undersöka resultatet.

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

Från utdata i ovanstående kodcell ser vi att varje objekt visas exakt en gång, och dubbletterna har tagits bort.

Observera också att ordningen på varor inte nödvändigtvis är densamma som deras ordning i den ursprungliga godislistan. Detta beror på att, förutom att vara en samling unika element, är ett Python-uppsättningsobjekt en oordnad samling.

Nu när vi har tagit bort dubbletterna genom att gjuta listan till en uppsättning kan vi återigen konvertera den till en lista, som visas nedan.

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

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

Använd listobjekt som ordboksnycklar för att ta bort dubbletter

Python-ordboken är en samling nyckel-värdepar där nycklarna unikt identifierar värdena.

Du kan skapa en Python-ordbok med metoden .fromkeys() med syntaxen: dict.fromkeys(nycklar, värden). Här är nycklar och värden iterables som innehåller nycklar och värden för ordboken.

  • nycklar är en obligatorisk parameter, och den kan vara vilken som helst itererbar Python som motsvarar nycklarna i ordboken.
  • värden är en valfri parameter. Om du inte anger vilka värden som går att upprepa, används standardvärdet None.

Utan att ange värdena returnerar dict.fromkeys(sweets) en Python-ordbok där värdena är inställda på None – standardvärdet. Kodcellen nedan förklarar detta.

dict.fromkeys(sweets)

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

Som med föregående avsnitt kan vi återigen konvertera ordboken till en lista, som visas nedan.

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

Från utgången ovan kan vi se att dubblettartiklarna har tagits bort från godislistan.

Sammanfattning👩‍🏫

Här är en sammanfattning av de olika metoderna du kan använda för att ta bort dubbletter av objekt eller upprepningar från Python-listor.

  • Använd Python-listmetoden .append() för att lägga till icke-repeterande objekt till en ny lista. Den nya listan innehåller varje objekt i den ursprungliga listan exakt en gång och tar bort alla upprepningar. Du kan också göra detta med hjälp av listförståelse.
  • Använd de inbyggda metoderna .count() och .remove() för att ta bort objekt som förekommer exakt två gånger. Densamma kan placeras i en while-loop för att ta bort alla ytterligare händelser.
  • Kasta en Python-lista till en uppsättning för att bara behålla de unika elementen.
  • Använd dict.fromkeys(list) för att ta bort eventuella dubbletter från listan eftersom det inte ska finnas några upprepningsnycklar i ordboken.

Kolla sedan in Python-projekt för att öva och lära dig. Eller lär dig hur du hittar indexet för ett objekt i Python-listor. Lycka till med lärandet!