logo

Python – būdai, kaip pašalinti dublikatus iš sąrašo

Šiame straipsnyje daugiausia dėmesio skiriama vienai iš operacijų, kaip gauti unikalų sąrašą iš sąrašo, kuriame yra galimas dublikatas. Pašalinant dublikatus iš sąrašo operacijos yra daug programų, todėl verta turėti žinių Python.

es5 prieš es6

Būdai, kaip pašalinti dublikatus iš sąrašo:

Žemiau pateikiami metodai, kuriuos aptarsime šiame straipsnyje:



Pašalinkite dublikatus iš sąrašo naudodami set() metodą

Tai yra populiariausias dublikatų pašalinimo iš sąrašo būdas set() metodas . Tačiau pagrindinis ir pastebimas šio metodo trūkumas yra tai, kad naudojant šį konkretų metodą prarandama elemento tvarka.

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))>

>

>

Išvestis

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

Laiko sudėtingumas: O(n)
Erdvės sudėtingumas: O(n)

Pašalinkite dublikatus iš sąrašo naudodami sąrašo supratimą

Šis metodas veikia panašiai kaip aukščiau pateiktas metodas, tačiau tai tik trumpas ilgesnio metodo, atlikto naudojant sąrašo supratimas. įsakymas

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))>

>

>

Išvestis

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

Laiko sudėtingumas: O(n)
Erdvės sudėtingumas: O(n)

Pašalinkite dublikatus iš sąrašo naudodami sąrašo supratimą su enumerate ()

The sąrašo supratimas kartu su išvardinti funkciją taip pat gali atlikti šią užduotį. Iš esmės jis ieško jau atsiradusių elementų ir praleidžia jų pridėjimą. Tai išsaugo sąrašo tvarką.

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))>

>

>

Išvestis

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

Laiko sudėtingumas: O(n^2)
Erdvės sudėtingumas: O(n)

Pašalinkite dublikatus iš python sąrašo naudodami collections.OrderedDict.fromkeys()

Tai greičiausias būdas pasiekti konkrečią užduotį. Pirmiausia jis pašalina dublikatus ir grąžina žodyną, kurį reikia konvertuoti į sąrašą. Tai gerai veikia ir stygų atveju.

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))>

įterpimo rūšiavimo algoritmas
>

>

Išvestis

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

Laiko sudėtingumas: O(n)
Erdvės sudėtingumas: O(n)

Pašalinkite dublikatus iš sąrašo naudodami in, o ne operatorius

Čia mes kartojame sąrašą ir su juo palaikome atitinkamą sąrašą, kuriame yra įvesties sąrašo elementas ir prieš įtraukdami naują elementą prie atitinkamo sąrašo patikriname ar elementas jau yra atitinkamame sąraše ir tokiu būdu galime pašalinti įvesties sąrašo dublikatą.

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))>

>

>

Išvestis

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

Laiko sudėtingumas: O(n^2)
Erdvės sudėtingumas: O(n)

Pašalinkite dublikatus iš sąrašo naudodami sąrašo supratimas ir Array.index() metodas

Taikant šį metodą, mes naudojame sąrašo supratimą, kad kartotume sąrašą, ir masyvo indeksavimą, kad gautume elementą iš masyvo. Elementus įtraukiame į masyvą tik tuo atveju, jei pirmasis elemento indeksas masyve atitinka dabartinį elemento indeksą arba nepaiso elemento.

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)>

>

>

Išvestis

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

Laiko sudėtingumas: O(n^2)
Erdvės sudėtingumas: O(n)

Pašalinkite dublikatus iš sąrašo naudodami arba Counter() metodas

Šiuo metodu mes naudojame Counter() metodas sudaryti žodyną iš nurodyto masyvo. Dabar gaukite visus raktus naudodami raktai() metodas, kuris suteikia tik unikalias reikšmes iš ankstesnio sąrašo.

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)>

>

>

Išvestis

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

Laiko sudėtingumas: O(n)
Erdvės sudėtingumas: O(n)

Pašalinkite dublikatus iš sąrašo naudodami unikalų numpy metodą

Šis metodas naudojamas, kai sąraše yra to paties tipo elementų, ir jis naudojamas dublikatams pašalinti iš sąrašo. Pirmiausia jis paverčia sąrašą į a nelygus masyvas ir tada naudoja numpy unikalus() metodas kad pašalintumėte visus pasikartojančius elementus iš sąrašo.

Pastaba: Įdiekite numpy modulį naudodami komandą pip install numpy dublikatas

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))>

>

>

Išvestis

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

Laiko sudėtingumas: O(n)
Erdvės sudėtingumas: O(n)

Naudojant pandų duomenų rėmelį

The pandas.DataFrame.drop_duplicates() metodas taip pat gali būti naudojamas dublikatams pašalinti iš sąrašo. Metodas grąžina naują duomenų rėmelį su pašalintais dublikatais ir pradinius duomenų rėmelio duomenis rėmelis lieka nepakitęs.

Algoritmas:

Su sąrašu sukurkite pandų duomenų rėmelį. „DataFram“ naudokite metodą drop_duplicates() ir konvertuokite gautą „DataFrame“ į sąrašą.

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))>

mašininio mokymosi tipai
>

>

Išvestis:

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

Laiko sudėtingumas: Metodo drop_duplicates() laiko sudėtingumas yra O(n log n), nes jis rūšiuoja reikšmes prieš pašalindamas dublikatus. Konvertavimas iš DataFrame į sąrašą užtrunka O (n) laiko. Todėl bendras šio metodo laiko sudėtingumas yra O (n log n).

Erdvės sudėtingumas: Šio metodo erdvės sudėtingumas yra O(n), nes sukuriamas naujas DataFrame ir sąrašas, kurių kiekvienas turi n elementų.