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

I den här guiden kommer du att utforska olika metoder för att eliminera dubbletter från listor i Python.

När du manipulerar listor i Python kan det ibland vara nödvändigt att endast arbeta med unika element, vilket innebär att dubbletter måste tas bort.

Det finns flera sätt att åstadkomma detta, och i den här artikeln kommer vi att granska fem olika tekniker.

Grundläggande om Python-listor

Låt oss börja med en snabb repetition av grunderna i Python-listor.

Python-listor är muterbara, vilket betyder att du kan ändra dem direkt genom att lägga till eller ta bort element. Dessutom tillåter Python-listor samlingar av element som inte nödvändigtvis är unika.

Men hur säkerställer du att du bara behåller de unika elementen och tar bort dubbletter?

Det finns flera sätt att göra det. Du kan antingen skapa en ny lista som endast innehåller de unika elementen från den ursprungliga listan, eller så kan du modifiera den ursprungliga listan direkt och ta bort dubbletter.

Vi kommer att undersöka dessa metoder i detalj under den här guiden.

Metoder för att avlägsna dubbletter från Python-listor

Låt oss ta ett verklighetsbaserat exempel. Tänk dig att du är på din kompis födelsedagsfest. 🎊🎉

I godissamlingen som visas, märker du att några av föremålen upprepas. Nu vill du rensa bort dessa dubbletter från godislistan.

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

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

I godislistan ovan upprepas ”godis” och ”cupcake” två gånger. Låt oss använda den här listan som exempel för att ta bort dubbletter.

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

Den mest grundläggande metoden är att skapa en ny lista där varje objekt endast förekommer en gång.

Ta en titt på kodblocket 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 börjar med att initialisera en tom lista, unique_sweets.
  • Sedan går vi igenom sweets-listan och bearbetar varje godis.
  • Om en given godis inte redan finns i unique_sweets-listan, lägger vi till den i slutet av unique_sweets-listan med metoden .append().

Anta att du stöter på ett återkommande objekt, som den andra förekomsten av ”godis” i sweets-listan. Denna kommer inte att läggas till i unique_sweets eftersom den redan finns där. Villkoret sweet not in unique_sweets blir False för den andra förekomsten av ”cupcake” och ”godis”.

Därför innehåller unique_sweets-listan varje objekt exakt en gång, utan några repetitioner.

Använd listkomprehension för att ta bort dubbletter

Du kan också använda listkomprehension för att fylla i unique_sweets-listan.

Behöver du en repetition av listkomprehension?

▶️ Kolla in en handledning om listkomprehension i Python.

Låt oss använda uttrycket för listkomprehension: [output for item in iterable if condition is True] för att skriva om loopkonstruktionen 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 avlägsna dubbletter från Python-listor kan du också använda inbyggda listmetoder, vilket vi ska gå in på 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 upprepade objekt.

– Metoden .count(), med syntaxen list.count(value), returnerar antalet gånger ett specifikt värde förekommer i listan. Så ett antal större än 1 indikerar att objektet är en dubblett.

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

Med ovanstående information får 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 .remove()-metoden endast tar bort den första förekomsten av ett värde, fungerar den inte för att ta bort objekt som förekommer mer än två gånger.

  • Om ett visst objekt är en dubblett (förekommer exakt två gånger), kommer den här metoden att ta bort den första förekomsten.
  • Om ett visst objekt upprepas K gånger, kommer K-1-upprepningar att kvarstå efter att koden ovan körts.

Men i allmänhet när vi pratar om dubbletter menar vi oftast alla upprepningar.

För att hantera det här fallet kan du modifiera loopen ovan för att ta bort alla upprepningar utom en. Istället för att använda ett villkor if för att kontrollera antalet av ett visst objekt, kan du använda 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 upprepningar av ’cupcake’ och 3 upprepningar av ’godis’.

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

Du kan använda en while-loop för att ta bort upprepningar, vilket visas nedan. while-loopen fortsätter att köras så länge antalet av en godis i listan är större än 1. När det bara finns en förekomst kvar blir villkoret sweets.count(sweet) > 1 False, och loopen går vidare 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 nästlade loopar kan vara ineffektivt, särskilt när du arbetar med stora listor. Överväg därför att använda någon av de andra teknikerna som diskuteras om prestanda är viktigt.

Hittills har vi lärt oss:

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

Det finns några inbyggda datastrukturer i Python som kräver att alla värden är unika, utan upprepning. Vi kan använda det genom att omvandla en Python-lista till en av dessa datastrukturer för att ta bort dubbletter, och sedan konvertera tillbaka dem till en lista. Vi kommer att utforska hur man gör detta i de kommande avsnitten.

Konvertera en Python-lista till en uppsättning för att ta bort dubbletter

Python-uppsättningar är samlingar av element där varje element är unikt. Därför är antalet objekt i uppsättningen (angivet av len(set-obj) lika med antalet unika element.

Du kan konvertera valfri itererbar Python-struktur till en uppsättning med syntaxen: set(iterable).

Låt oss konvertera godislistan till en uppsättning och se resultatet.

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

Från utdata ovan kan vi se att varje objekt endast förekommer en gång, vilket visar att dubbletterna har tagits bort.

Notera även att ordningen på objekten inte nödvändigtvis är samma som i den ursprungliga godislistan. Detta beror på att Python-uppsättningar är oordnade samlingar.

Nu när vi har tagit bort dubbletterna genom att omvandla listan till en uppsättning, kan vi konvertera tillbaka 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 nycklar i en ordlista för att ta bort dubbletter

En Python-ordlista är en samling av nyckel-värdepar där nycklarna unikt identifierar värdena.

Du kan skapa en Python-ordlista med hjälp av metoden .fromkeys() med syntaxen: dict.fromkeys(keys, values). Här är keys och values itererbara strukturer som innehåller nycklar och värden för ordlistan.

  • keys är en obligatorisk parameter och kan vara vilken itererbar Python-struktur som helst som representerar nycklarna i ordlistan.
  • values är en valfri parameter. Om du inte anger värden kommer standardvärdet None att användas, vilket kan repeteras.

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

dict.fromkeys(sweets)

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

Precis som i föregående avsnitt kan vi återigen konvertera ordlistan tillbaka till en lista, vilket visas nedan.

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

Från utdata ovan kan vi se att dubbletter har tagits bort från godislistan.

Sammanfattning 👩‍🏫

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

  • Använd Python-listmetoden .append() för att lägga till icke-upprepande objekt i en ny lista. Den nya listan innehåller varje objekt från den ursprungliga listan exakt en gång och tar bort alla upprepningar. Du kan också göra detta med hjälp av listkomprehension.
  • Använd de inbyggda metoderna .count() och .remove() för att ta bort objekt som förekommer exakt två gånger. Detsamma kan placeras i en while-loop för att ta bort alla ytterligare upprepningar.
  • Omvandla en Python-lista till en uppsättning för att endast behålla de unika elementen.
  • Använd dict.fromkeys(list) för att ta bort dubbletter från listan eftersom nycklar i en ordlista inte får upprepas.

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 inlärningen!