Een lijst in Python dedupliceren

  1. Een lijst ontdubbelen zonder de volgorde te behouden
  2. Een lijst met bewaarvolgorde ontdubbelen

Soms hebben we in Python een lijst met waarden, waaronder enkele duplicaten. Het is een alledaags gebruik om alle duplicaten uit de lijst te verwijderen, zodat alle resterende waarden in de lijst uniek zijn.

We kunnen dit bereiken met behulp van verschillende methoden, waarvan sommige de oorspronkelijke volgorde van elementen behouden, andere niet.

Een lijst ontdubbelen zonder de volgorde te behouden

Als het geen vereiste is om de oorspronkelijke bestelling te behouden, kunnen we een lijst ontdubbelen met behulp van de ingebouwde set gegevensstructuur. set is een gegevensstructuur die mogelijk alleen een uniek element bevat.

Door dergelijke set uit onze eerste lijst te construeren , worden alle dubbele elementen genegeerd. Dan kunnen we de set weer omzetten in een lijst en krijgen we een lijst met unieke elementen.

Helaas verandert de volgorde van de elementen, omdat deduplicatie-functionaliteit van de set gegevensstructuur wordt geïmplementeerd met behulp van hashtabellen, die niet onthouden welke elementen eerst werden ingevoegd.

>>> names = ['Bob', 'Stacy', 'Sarah', 'Jim', 'Stacy', 'Jim']
>>> unique_set = set(names)
>>> unique_list = list(unique_set)
>>> unique_list
['Stacy', 'Sarah', 'Jim', 'Bob']

Als u het NumPy- pakket gebruikt voor wetenschappelijk computergebruik in Python, kan je de numpy.unique() functie ook gebruiken.

>>> import numpy
>>> names = ['Bob', 'Stacy', 'Sarah', 'Jim', 'Stacy', 'Jim'] 
>>> numpy.unique(names).tolist()
['Bob', 'Jim', 'Sarah', 'Stacy']

Merk op dat de bovenstaande methode ook de oorspronkelijke elementvolgorde niet behoudt. De manier om bestellingen te bewaren NumPy is ingewikkelder en je kan deze hieronder vinden.

Een lijst met bewaarvolgorde ontdubbelen

Een eenvoudige oplossing, waarmee de oorspronkelijke volgorde kan worden behouden, is het gebruik van een dubbele voor elke lus.

De eerste lus doorloopt alle elementen van de oorspronkelijke lijst. De tweede lus controleert of we al een element met dezelfde waarde hebben gezien.

Als we dat niet hebben gedaan, voegen we het toe aan de unique lijst, die uiteindelijk unieke elementen in de oorspronkelijke volgorde zal bevatten.

>>> names = ['Bob', 'Stacy', 'Sarah', 'Jim', 'Stacy', 'Jim']
>>> unique = []
>>> for name in names:         # 1st loop
...   if name not in unique:   # 2nd loop
...     unique.append(name)
...
>>> unique
['Bob', 'Stacy', 'Sarah', 'Jim']

Een andere manier om een ​​lijst te ontdubbelen met behoud van de oorspronkelijke volgorde is door de collections.OrderedDict gegevensstructuur te gebruiken . OrderedDict is een speciaal soort gegevensstructuur van een woordenboek in Python, die de volgorde van sleutelinvoeging onthoudt.

>>> from collections import OrderedDict
>>> names = ['Bob', 'Stacy', 'Sarah', 'Jim', 'Stacy', 'Jim']
>>> unique = list(OrderedDict.fromkeys(names))
>>> unique
['Bob', 'Stacy', 'Sarah', 'Jim']

Als u Pandas Python-gegevensanalysebibliotheek gebruikt, pandas.unique kan dit ook nuttig zijn. Deze methode is orderbehoud.

>>> import pandas
>>> names = ['Bob', 'Stacy', 'Sarah', 'Jim', 'Stacy', 'Jim']
>>> pandas.unique(names).tolist()
['Bob', 'Stacy', 'Sarah', 'Jim']

De manier van een NumPy om een ​​lijst te dedupliceren met behoud van de bestelling is een beetje ingewikkelder. U moet een index van elk afzonderlijk element onthouden en vervolgens een unieke lijst van de oorspronkelijke maken met behulp van dergelijke indexen.

>>> import numpy
>>> names = ['Bob', 'Stacy', 'Sarah', 'Jim', 'Stacy', 'Jim']
>>> _, indexes = numpy.unique(names, return_index=True)
>>> unique = [names[i] for i in numpy.sort(indexes)]
>>> unique
['Bob', 'Stacy', 'Sarah', 'Jim']

Gerelateerde Artikelen - Python List

  • Wat is het verschil tussen lijstmethoden toevoegen en uitbreiden
  • Een lijst converteren naar tekenreeks in Python
  • Hoe twee of meerdere lijsten in Python samen te voegen
  • Wat is het verschil tussen del, verwijder en pop op Python-lijsten