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.
min max
Způsoby, jak odstranit duplikáty ze seznamu:
Níže jsou uvedeny metody, které pokryjeme v tomto článku:
- Použitím metoda set().
- Použitím porozumění seznamu
- Použití porozumění seznamu s vyjmenovat()
- Použitím collections.OrderedDict.fromkeys()
- Použití dovnitř, ne dovnitř operátory
- Použitím porozumění seznamu a metoda Array.index().
- Použitím Metoda Counter().
- Použitím Numpy unikátní metoda
- Používat Pandas DataFrame
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)> |
>
>
typ casting a konverze typu v javaVý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))> |
>
>
odstranění posledního commitu git
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.