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:
- Použitím metóda set().
- Použitím porozumenie zoznamu
- Používanie porozumenia zoznamu s enumerate()
- Použitím collections.OrderedDict.fromkeys()
- Používa sa dovnútra, nie dovnútra operátorov
- Použitím porozumenie zoznamu a metóda Array.index().
- Použitím Metóda Counter().
- Použitím Numpy unikátna metóda
- Pomocou a DataFrame Pandas
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.