logo

Python - veidi, kā noņemt dublikātus no saraksta

Šajā rakstā ir apskatīta viena no darbībām, kā iegūt unikālu sarakstu no saraksta, kurā ir iespējams dublikāts. Dublikātu noņemšanai no saraksta darbības ir liels lietojumprogrammu skaits, un tāpēc tās zināšanas ir noderīgas Python.

preity zinta

Veidi, kā noņemt dublikātus no saraksta:

Tālāk ir norādītas metodes, kuras mēs apskatīsim šajā rakstā:

Noņemiet dublikātus no saraksta, izmantojot set() metodi

Šis ir vispopulārākais veids, kā dublikāti tiek noņemti no saraksta set() metode . Taču šīs pieejas galvenais un ievērojamais trūkums ir tas, ka ar šo konkrēto metodi tiek zaudēta elementa secība.



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

>

>

Izvade

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

Laika sarežģītība: O(n)
Kosmosa sarežģītība: O(n)

Noņemiet dublikātus no saraksta, izmantojot saraksta izpratni

Šī metode darbojas līdzīgi iepriekšminētajai metodei, taču šī ir tikai vienas līnijas saīsinājums garākai metodei, kas veikta, izmantojot saraksta izpratne. pasūtījums

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

>

>

Izvade

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

Laika sarežģītība: O(n)
Kosmosa sarežģītība: O(n)

Noņemiet dublikātus no saraksta, izmantojot saraksta izpratni ar enumerate()

The saraksta izpratne kopā ar uzskaitīt funkciju var arī sasniegt šo uzdevumu. Tas pamatā meklē jau notikušus elementus un izlaiž to pievienošanu. Tas saglabā saraksta secību.

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

>

>

Izvade

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

Laika sarežģītība: O(n^2)
Kosmosa sarežģītība: O(n)

Noņemiet dublikātus no python saraksta, izmantojot collections.OrderedDict.fromkeys()

Šī ir ātrākā metode konkrēta uzdevuma izpildei. Vispirms tas noņem dublikātus un atgriež vārdnīcu, kas ir jāpārvērš sarakstā. Tas labi darbojas arī stīgu gadījumā.

Python3


virkņu masīvam java



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

>

>

Izvade

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

Laika sarežģītība: O(n)
Kosmosa sarežģītība: O(n)

Noņemiet dublikātus no saraksta, izmantojot in, nevis operatorus

Šajā mēs atkārtojam sarakstu un uzturam ar to atbilstošu sarakstu, kurā ir ievades saraksta elements un pirms jaunā elementa pievienošanas atbilstošajam sarakstam mēs pārbaudām, vai elements jau pastāv vai nav attiecīgajā sarakstā un šādā veidā mēs varam noņemt ievades saraksta dublikātu.

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

>

>

Izvade

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

Laika sarežģītība: O(n^2)
Kosmosa sarežģītība: O(n)

Noņemiet dublikātus no saraksta, izmantojot saraksta izpratne un Array.index() metode

Šajā metodē mēs izmantojam saraksta izpratni, lai atkārtotu sarakstu un masīva indeksēšanu, lai iegūtu vienumu no masīva. Mēs pievienojam vienumus masīvam tikai tad, ja masīva elementa pirmais indekss atbilst elementa pašreizējam indeksam vai arī elements netiek ņemts vērā.

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

>

>

Izvade

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

Laika sarežģītība: O(n^2)
Kosmosa sarežģītība: O(n)

Noņemiet dublikātus no saraksta, izmantojot vai Counter() metode

Šajā metodē mēs izmantojam Counter() metode lai no dotā masīva izveidotu vārdnīcu. Tagad izgūstiet visas atslēgas, izmantojot atslēgas () metode, kas dod tikai unikālas vērtības no iepriekšējā saraksta.

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

>

>

Izvade

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

Laika sarežģītība: O(n)
Kosmosa sarežģītība: O(n)

Noņemiet dublikātus no saraksta, izmantojot numpy unikālo metodi

Šo metodi izmanto, ja sarakstā ir viena veida elementi, un to izmanto, lai no saraksta noņemtu dublikātus. Vispirms tas pārvērš sarakstu par a numpy masīvs un pēc tam izmanto numpy unikāla() metode lai no saraksta noņemtu visus dublētos elementus.

Piezīme. Instalējiet moduli numpy, izmantojot komandu pip install numpy dublikāts

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

>

>

Izvade

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

Laika sarežģītība: O(n)
Kosmosa sarežģītība: O(n)

Izmantojot pandas datu rāmi

The pandas.DataFrame.drop_duplicates() metodi var izmantot arī dublikātu noņemšanai no saraksta. Metode atgriež jaunu DataFrame ar noņemtiem dublikātiem un sākotnējos datu rāmja datus rāmis paliek nemainīgs.

Algoritms:

Izveidojiet pandas datu rāmi ar sarakstu. Izmantojiet metodi drop_duplicates() uz DataFram un pēc tam konvertējiet iegūto DataFrame par sarakstu.

Python3


mēģināt noķert java



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

>

>

Izvade:

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

Laika sarežģītība: Metodes drop_duplicates() laika sarežģītība ir O(n log n), jo tā kārto vērtības pirms dublikātu noņemšanas. Pārveidošana no DataFrame uz sarakstu aizņem O(n) laiku. Tāpēc šīs metodes kopējā laika sarežģītība ir O (n log n).

Telpas sarežģītība: Šīs metodes telpas sarežģītība ir O(n), jo tiek izveidots jauns DataFrame un saraksts, katrs ar n elementiem.