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.
premenovať adresár v linuxe
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
čísla pre abecedu
# 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
slnečný deol
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.