Python – Spôsoby, ako odstrániť duplikáty zo zoznamu

Tento článok sa zameriava na jednu z operácií získania jedinečného zoznamu zo zoznamu, ktorý obsahuje možný duplikát. Odstránenie duplikátov z operácie zoznamu má veľký počet aplikácií, a preto je dobré mať jeho znalosti Python.

Spôsoby, ako odstrániť duplikáty zo zoznamu:

Nižšie sú uvedené metódy, ktorým sa budeme venovať v tomto článku:

Odstráňte duplikáty zo zoznamu pomocou metódy set().

Toto je najpopulárnejší spôsob odstránenia duplikátov zo zoznamu metóda set(). . Hlavnou a pozoruhodnou nevýhodou tohto prístupu je však to, že pri tejto konkrétnej metóde sa stráca usporiadanie prvkov.

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ýkon

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

Časová zložitosť: O(n)
Priestorová zložitosť: O(n)

Odstráňte duplikáty zo zoznamu pomocou porozumenia zoznamu

Táto metóda funguje podobne ako vyššie uvedená metóda, ale je to len jednoradová skratka dlhšej metódy vykonanej pomocou porozumenie zoznamu. objednať

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ýkon

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

Časová zložitosť: O(n)
Priestorová zložitosť: O(n)

Odstráňte duplikáty zo zoznamu pomocou porozumenia zoznamu pomocou enumerate()

The porozumenie zoznamu spolu s enumeračná funkcia môže splniť aj túto úlohu. V podstate hľadá už vyskytujúce sa prvky a preskakuje ich pridávanie. Zachováva poradie zoznamu.

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ýkon

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

Časová zložitosť: O(n^2)
Priestorová zložitosť: O(n)

Odstráňte duplikáty zo zoznamu v pythone pomocou collections.OrderedDict.fromkeys()

Toto je najrýchlejší spôsob dosiahnutia konkrétnej úlohy. Najprv odstráni duplikáty a vráti slovník, ktorý je potrebné previesť na zoznam. Toto funguje dobre aj v prípade strún.

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ýkon

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

Časová zložitosť: O(n)
Priestorová zložitosť: O(n)

Odstráňte duplikáty zo zoznamu pomocou operátorov in, nie v operátoroch

V tomto iterujeme zoznam a udržiavame s ním zodpovedajúci zoznam, ktorý obsahuje prvok vstupného zoznamu a pred pridaním nového prvku do príslušného zoznamu skontrolujeme, či prvok už existuje alebo nie v príslušnom zozname a týmto spôsobom môžeme odstrániť duplikát vstupného zoznamu.

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ýkon

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

Časová zložitosť: O(n^2)
Priestorová zložitosť: O(n)

Odstrániť duplikáty zo zoznamu pomocou porozumenie zoznamu a metóda Array.index().

V tejto metóde používame porozumenie zoznamu na iteráciu cez zoznam a indexovanie poľa, aby sme získali položku z poľa. Položky pridávame do poľa iba vtedy, ak sa prvý index prvku v poli zhoduje s aktuálnym indexom prvku alebo prvok zanedbáva.

Python




# 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ýkon

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

Časová zložitosť: O(n^2)
Priestorová zložitosť: O(n)

Odstráňte duplikáty zo zoznamu pomocou alebo Metóda Counter().

Pri tejto metóde používame Metóda Counter(). vytvoriť slovník z daného poľa. Teraz získajte všetky kľúče pomocou kľúče () metóda, ktorá poskytuje iba jedinečné hodnoty z predchádzajúceho zoznamu.

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ýkon

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

Časová zložitosť: O(n)
Priestorová zložitosť: O(n)

Odstráňte duplikáty zo zoznamu pomocou numpy unikátnej metódy

Táto metóda sa používa, keď zoznam obsahuje prvky rovnakého typu a používa sa na odstránenie duplikátov zo zoznamu. Najprv skonvertuje zoznam na a numpy pole a potom použije metóda numpy unique(). na odstránenie všetkých duplicitných prvkov zo zoznamu.

Poznámka: Nainštalujte modul numpy pomocou prí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ýkon

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

Časová zložitosť: O(n)
Priestorová zložitosť: O(n)

Použitie dátového rámca pandy

The pandas.DataFrame.drop_duplicates() metódu možno použiť aj na odstránenie duplikátov zo zoznamu. Metóda vráti nový dátový rámec s odstránenými duplikátmi a pôvodné dáta dátového rámca rám zostáva nezmenený.

Algoritmus:

Vytvorte dátový rámec pandy so zoznamom. Použite metódu drop_duplicates() na DataFram a potom skonvertujte výsledný DataFrame na zoznam.

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ýkon:

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

Časová zložitosť: Časová zložitosť metódy drop_duplicates() je O(n log n), pretože triedi hodnoty pred odstránením duplikátov. Konverzia z DataFrame na zoznam trvá O(n) čas. Celková časová zložitosť tejto metódy je teda O(n log n).

Zložitosť priestoru: Priestorová zložitosť tejto metódy je O(n), pretože sa vytvorí nový DataFrame a zoznam, každý s n prvkami.