Python – způsoby, jak odstranit duplikáty ze seznamu

Tento článek se zaměřuje na jednu z operací získání jedinečného seznamu ze seznamu, který obsahuje možný duplikát. Odstranění duplikátů z operace seznamu má velké množství aplikací, a proto je dobré mít jeho znalost Krajta.

Způsoby, jak odstranit duplikáty ze seznamu:

Níže jsou uvedeny metody, které pokryjeme v tomto článku:

Odstraňte duplikáty ze seznamu pomocí metody set().

Toto je nejoblíbenější způsob odstranění duplikátů ze seznamu metoda set(). . Ale hlavní a pozoruhodná nevýhoda tohoto přístupu je, že se v této konkrétní metodě ztratí uspořádání prvku.

Python3




# initializing list> test_list> => [> 1> ,> 5> ,> 3> ,> 6> ,> 3> ,> 5> ,> 6> ,> 1> ]> print> (> 'The original list is : '> > +> str> (test_list))> # using set() to remove duplicated from list> test_list> => list> (> set> (test_list))> # printing list after removal> # distorted ordering> print> (> 'The list after removing duplicates : '> > +> str> (test_list))>

Výstup

The original list is : [1, 5, 3, 6, 3, 5, 6, 1] The list after removing duplicates : [1, 3, 5, 6] 

Časová náročnost: Na)
Prostorová složitost: Na)

Odstraňte duplikáty ze seznamu pomocí porozumění seznamu

Tato metoda funguje podobně jako výše uvedená metoda, ale jedná se pouze o jednořádkovou zkratku delší metody provedené pomocí porozumění seznamu. objednat

Python3




# initializing list> test_list> => [> 1> ,> 3> ,> 5> ,> 6> ,> 3> ,> 5> ,> 6> ,> 1> ]> print> (> 'The original list is : '> > +> str> (test_list))> # using list comprehension to remove duplicated from list> res> => []> [res.append(x)> for> x> in> test_list> if> x> not> in> res]> # printing list after removal> print> (> 'The list after removing duplicates : '> > +> str> (res))>

Výstup

The original list is : [1, 3, 5, 6, 3, 5, 6, 1] The list after removing duplicates : [1, 3, 5, 6] 

Časová náročnost: Na)
Prostorová složitost: Na)

Odstraňte duplikáty ze seznamu pomocí porozumění seznamu pomocí enumerate()

The porozumění seznamu spolu s funkce výčtu může také splnit tento úkol. V podstatě hledá již vzniklé prvky a vynechává je přidávání. Zachovává pořadí seznamu.

Python3




# initializing list> test_list> => [> 1> ,> 5> ,> 3> ,> 6> ,> 3> ,> 5> ,> 6> ,> 1> ]> print> (> 'The original list is : '> > +> str> (test_list))> # using list comprehension + enumerate() to remove duplicated from list> res> => [i> for> n, i> in> enumerate> (test_list)> if> i> not> in> test_list[:n]]> # printing list after removal> print> (> 'The list after removing duplicates : '> > +> str> (res))>

Výstup

The original list is : [1, 5, 3, 6, 3, 5, 6, 1] The list after removing duplicates : [1, 5, 3, 6] 

Časová náročnost: O(n^2)
Prostorová složitost: Na)

Odstraňte duplikáty ze seznamu v pythonu pomocí collections.OrderedDict.fromkeys()

Toto je nejrychlejší způsob, jak dosáhnout konkrétního úkolu. Nejprve odstraní duplikáty a vrátí slovník, který je třeba převést na seznam. To funguje dobře i v případě strun.

Python3




# using collections.OrderedDict.fromkeys()> from> collections> import> OrderedDict> # initializing list> test_list> => [> 1> ,> 5> ,> 3> ,> 6> ,> 3> ,> 5> ,> 6> ,> 1> ]> print> (> 'The original list is : '> > +> str> (test_list))> # using collections.OrderedDict.fromkeys() to remove duplicated from list> res> => list> (OrderedDict.fromkeys(test_list))> # printing list after removal> print> (> 'The list after removing duplicates : '> > +> str> (res))>

Výstup

The original list is : [1, 5, 3, 6, 3, 5, 6, 1] The list after removing duplicates : [1, 5, 3, 6] 

Časová náročnost: Na)
Prostorová složitost: Na)

Odstraňte duplikáty ze seznamu pomocí operátorů in, nikoli v

V tomto iterujeme seznamem a udržujeme s ním odpovídající seznam, který obsahuje prvek vstupního seznamu a před připojením nového prvku do odpovídajícího seznamu zkontrolujeme, zda prvek již v odpovídajícím seznamu existuje nebo neexistuje a tímto způsobem můžeme odstranit duplikát vstupního seznamu.

Python3




# initializing list> test_list> => [> 1> ,> 5> ,> 3> ,> 6> ,> 3> ,> 5> ,> 6> ,> 1> ]> print> (> 'The original list is : '> +> str> (test_list))> res> => []> for> i> in> test_list:> > if> i> not> in> res:> > res.append(i)> # printing list after removal> print> (> 'The list after removing duplicates : '> +> str> (res))>

Výstup

The original list is : [1, 5, 3, 6, 3, 5, 6, 1] The list after removing duplicates : [1, 5, 3, 6] 

Časová náročnost: O(n^2)
Prostorová složitost: Na)

Odstraňte duplikáty ze seznamu pomocí list comprehension a metoda Array.index().

V této metodě používáme porozumění seznamu k iteraci seznamu a indexování pole, abychom získali položku z pole. Položky přidáme do pole pouze v případě, že první index prvku v poli odpovídá aktuálnímu indexu prvku nebo prvek zanedbává.

Krajta




# initializing list> arr> => [> 1> ,> 5> ,> 3> ,> 6> ,> 3> ,> 5> ,> 6> ,> 1> ]> print> (> 'The original list is : '> +> str> (arr))> # using list comprehension + arr.index()> res> => [arr[i]> for> i> in> range> (> len> (arr))> if> i> => => arr.index(arr[i]) ]> # printing list after removal of duplicate> print> (> 'The list after removing duplicates :'> > ,res)>

Výstup

The original list is : [1, 5, 3, 6, 3, 5, 6, 1] ('The list after removing duplicates :', [1, 5, 3, 6]) 

Časová náročnost: O(n^2)
Prostorová složitost: Na)

Odstraňte duplikáty ze seznamu pomocí nebo Metoda Counter().

V této metodě používáme Metoda Counter(). vytvořit slovník z daného pole. Nyní získejte všechny klíče pomocí klíče() metoda, která poskytuje pouze jedinečné hodnoty z předchozího seznamu.

Python3




from> collections> import> Counter> # initializing list> arr> => [> 1> ,> 5> ,> 3> ,> 6> ,> 3> ,> 5> ,> 6> ,> 1> ]> print> (> 'The original list is : '> +> str> (arr))> # using Counter() + keys() to remove duplicated from list> temp> => Counter(arr)> res> => [> *> temp]> # printing list after removal of duplicate> print> (> 'The list after removing duplicates :'> > ,res)>

Výstup

The original list is : [1, 5, 3, 6, 3, 5, 6, 1] The list after removing duplicates : [1, 5, 3, 6] 

Časová náročnost: Na)
Prostorová složitost: Na)

Odstraňte duplikáty ze seznamu pomocí jedinečné metody numpy

Tato metoda se používá, když seznam obsahuje prvky stejného typu a používá se k odstranění duplikátů ze seznamu. Nejprve převede seznam na a numpy pole a poté použije metoda numpy unique(). k odstranění všech duplicitních prvků ze seznamu.

Poznámka: Nainstalujte modul numpy pomocí příkazu pip install numpy duplikát

Python3




# initializing list> test_list> => [> 1> ,> 5> ,> 3> ,> 6> ,> 3> ,> 5> ,> 6> ,> 1> ]> print> (> 'The original list is : '> > +> str> (test_list))> > # using numpy> import> numpy as np> > # removing duplicated from list> res> => np.unique(test_list)> > # printing list after removal> print> (> 'The list after removing duplicates : '> > +> str> (res))>

Výstup

The original list is : [1, 5, 3, 6, 3, 5, 6, 1] The list after removing duplicates : [1 3 5 6] 

Časová náročnost: Na)
Prostorová složitost: Na)

Použití datového rámce pandas

The pandas.DataFrame.drop_duplicates() metodu lze také použít k odstranění duplikátů ze seznamu. Metoda vrací nový DataFrame s odstraněnými duplikáty a původní data datového rámce rám zůstává nezměněno.

Algoritmus:

Vytvořte datový rámec pandy se seznamem. Použijte metodu drop_duplicates() na DataFram a poté převeďte výsledný DataFrame na seznam.

Python3




import> pandas as pd> # initializing list> test_list> => [> 1> ,> 5> ,> 3> ,> 6> ,> 3> ,> 5> ,> 6> ,> 1> ]> print> (> 'The original list is : '> +> str> (test_list))> # creating DataFrame> df> => pd.DataFrame({> 'col'> : test_list})> # using drop_duplicates() method> df.drop_duplicates(inplace> => True> )> # converting back to list> res> => df[> 'col'> ].tolist()> # printing list after removal> print> (> 'The list after removing duplicates : '> +> str> (res))>

Výstup:

The original list is : [1, 5, 3, 6, 3, 5, 6, 1] The list after removing duplicates : [1 , 5 , 3, 6] 

Časová složitost: Časová složitost metody drop_duplicates() je O(n log n), protože třídí hodnoty před odstraněním duplikátů. Převod z DataFrame na seznam trvá O(n) čas. Celková časová složitost této metody je tedy O(n log n).

Složitost prostoru: Prostorová složitost této metody je O(n), protože je vytvořen nový DataFrame a seznam, každý s n prvky.