Š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:
- Naudojant set() metodas
- Naudojant sąrašo supratimas
- Sąrašo supratimo naudojimas su išvardinti ()
- Naudojant collections.OrderedDict.fromkeys()
- Naudojimas viduje, o ne viduje operatoriai
- Naudojant sąrašo supratimas ir Array.index() metodas
- Naudojant Counter() metodas
- Naudojant Numpy unikalus metodas
- Naudojant a Pandas DataFrame
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ų.