5 metode pentru a elimina elementele duplicate din listele Python

În acest tutorial, veți învăța cum să eliminați elementele duplicat din listele Python.

Când lucrați cu liste în Python, uneori poate fi necesar să lucrați doar cu elemente unice din listă – eliminând duplicatele.

Există câteva moduri diferite în care puteți face acest lucru. În acest tutorial, vom trece peste cinci astfel de tehnici.

Bazele listelor Python

Să începem discuția prin a revizui elementele de bază ale listelor Python.

Listele Python sunt mutabil. Deci, le puteți modifica la locul lor adăugând și eliminând elemente din listă. În plus, listele Python sunt colecții de elemente care nu sunt neapărat unice.

Deci, cum păstrați doar elementele unice și eliminați elementele duplicat sau repetate?

Ei bine, puteți face acest lucru în câteva moduri diferite. Puteți fie să creați o listă nouă care să conțină doar elementele unice din lista originală. Sau puteți alege să modificați lista originală și să eliminați elementele duplicate.

Le vom învăța în detaliu în acest tutorial.

Metode de eliminare a duplicatelor din listele Python

Să luăm un exemplu din lumea reală. Să presupunem că ești la petrecerea de naștere a prietenului tău.🎊🎉

În colecția de dulciuri afișată, vezi că sunt câteva articole care se repetă. Acum doriți să eliminați acele articole duplicat din lista de dulciuri.

Să creăm o listă de dulciuri care să conțină toate articolele din imaginea de mai sus.

sweets = ["cupcake","candy","lollipop","cake","lollipop","cheesecake","candy","cupcake"]

În lista de dulciuri de mai sus, articolele „bomboane” și „cupcake” se repetă de două ori. Să folosim această listă exemplu pentru a elimina elementele duplicat.

Iterați peste listele Python pentru a elimina duplicatele

Cea mai simplă metodă este de a crea o nouă listă care să conțină fiecare articol exact o dată.

Citiți celula de cod de mai jos:

unique_sweets = []
for sweet in sweets:
  if sweet not in unique_sweets:
    unique_sweets.append(sweet)

print(unique_sweets)

# Output
['cupcake', 'candy', 'lollipop', 'cake', 'cheesecake']
  • Inițializam o listă goală unique_sweets.
  • În timp ce parcurgem lista de dulciuri, accesăm fiecare dulce.
  • Dacă dulce nu este deja prezent în lista unique_sweets, îl adăugăm la sfârșitul listei unique_sweets folosind metoda .append().
  Top 13 instrumente de marketing de conținut pentru creștere și implicare

Să presupunem că întâlniți un element care se repetă, de exemplu, a doua apariție a „bomboane” în lista de dulciuri. Aceasta nu este adăugată la lista unique_sweets, deoarece este deja prezentă: sweet not in unique_sweets evaluează False pentru a doua apariție a „cupcake” și „bomboane”.

Prin urmare, în această metodă, fiecare articol apare exact o dată în lista unique_sweets – fără nicio repetare.

Utilizați Lista de înțelegere pentru a elimina duplicatele

De asemenea, puteți utiliza lista de înțelegere pentru a completa lista unique_sweets.

Doriți să reîmprospătați elementele de bază ale înțelegerii listelor?

▶️ Consultați tutorialul despre înțelegerea listelor în Python.

Să folosim expresia de înțelegere a listei: [output for item in iterable if condition is True] pentru a rescrie bucla de mai sus în mod concis.

unique_sweets = []
[unique_sweets.append(sweet) for sweet in sweets if sweet not in unique_sweets]
print(unique_sweets)

# Output
['cupcake', 'candy', 'lollipop', 'cake', 'cheesecake']

Chiar dacă creați o nouă listă, nu completați lista creată cu valori. Acest lucru se datorează faptului că rezultatul este operația .append() la lista unique_sweets.

Pentru a elimina elementele duplicat din listele Python, puteți utiliza și metode de listă încorporate, iar acest lucru îl vom trata în secțiunea următoare.

Utilizați metode de listă încorporate pentru a elimina duplicatele

Puteți folosi metodele de listă Python .count() și .remove() pentru a elimina elementele duplicate.

– Cu sintaxa list.count(value), metoda .count() returnează de câte ori apare valoarea în listă. Deci, numărul corespunzător elementelor repetate va fi mai mare decât 1.

– list.remove(value) elimină prima apariție a valorii din listă.

Folosind cele de mai sus, avem următorul cod.

for sweet in sweets:
  # check if the count of sweet is > 1 (repeating item)
  if sweets.count(sweet) > 1:
  # if True, remove the first occurrence of sweet
    sweets.remove(sweet)

print(sweets)

# Output
['cake', 'lollipop', 'cheesecake', 'candy', 'cupcake']

Deoarece metoda .remove() elimină doar prima apariție a unei valori, nu o puteți folosi pentru a elimina elementele care apar de mai mult de două ori.

  • Dacă un anumit element este duplicat (apare exact de două ori), această metodă elimină prima apariție.
  • Dacă un anumit articol este repetat de K ori, atunci după rularea codului de mai sus, repetările K-1 vor rămâne în continuare.
  12 Top AI Creatori de prezentări pentru vânzări, marketing și pitch decks

Dar, în general, când spunem duplicate, de obicei ne referim la toate repetițiile.

Pentru a gestiona acest caz, puteți modifica bucla de mai sus pentru a elimina toate repetările, cu excepția uneia. În loc să utilizați o condiție if pentru a verifica numărul unui anumit articol, puteți rula o buclă while pentru a elimina în mod repetat dublările până când numărul fiecărui element din listă este 1.

Lista dulciurilor conține acum 2 repetări de „cupcake” și 3 repetări de „bomboane”.

sweets = ["cupcake","candy","lollipop","cake","lollipop","candy","cheesecake","candy","cupcake"]

Puteți folosi o buclă while pentru a elimina repetările, așa cum se arată mai jos. Bucla while continuă să ruleze atâta timp cât numărul de dulciuri din dulciuri este mai mare de 1. Când rămâne o singură apariție, condiția sweets.count(sweet) > 1 devine False, iar bucla trece la următorul articol.

for sweet in sweets:
  # check if the count of sweet is > 1 (repeating item)
  while(sweets.count(sweet) > 1):
  # repeatedly remove the first occurrence of sweet until one occurrence remains.
    sweets.remove(sweet)

print(sweets)
# Output
['cake', 'lollipop', 'cheesecake', 'candy', 'cupcake']

Dar utilizarea buclelor imbricate poate să nu fie foarte eficientă, așa că ați putea lua în considerare utilizarea uneia dintre celelalte tehnici discutate dacă lucrați cu liste mari.

Până acum, am învățat următoarele:

  • Metode de eliminare a elementelor duplicate din listele Python – prin crearea de liste noi – care conțin numai articole unice
  • Metode de listă încorporate .count() și .remove() pentru a modifica lista în loc

Există unele structuri de date încorporate în Python care necesită ca valorile să fie toate unice – fără repetare. Prin urmare, putem proiecta o listă Python într-una dintre aceste structuri de date pentru a elimina duplicatele. Și apoi convertiți-le înapoi într-o listă. Vom învăța cum să facem acest lucru în secțiunile următoare.

Transmiteți lista Python într-un set pentru a elimina duplicatele

Seturile Python sunt colecții de elemente care sunt toate unice. Prin urmare, numărul de elemente prezenți în mulțime (dat de len() este egal cu numărul de elemente unice prezente.

Puteți arunca orice iterabil Python într-un set folosind sintaxa: set(iterable).

Acum, să aruncăm lista de dulciuri într-un set și să examinăm rezultatul.

set(sweets)
# Output
{'cake', 'candy', 'cheesecake', 'cupcake', 'lollipop'}

Din rezultatul din celula de cod de mai sus, vedem că fiecare articol apare exact o dată, iar duplicatele au fost eliminate.

  Ghid pentru prevenirea intruziunilor în rețea

De asemenea, observați că ordinea articolelor nu este neapărat aceeași cu ordinea lor din lista originală de dulciuri. Acest lucru se datorează faptului că, pe lângă faptul că este o colecție de elemente unice, un obiect set Python este o colecție neordonată.

Acum că am eliminat duplicatele prin turnarea listei într-un set, o putem converti din nou într-o listă, așa cum se arată mai jos.

unique_sweets = list(set(sweets))
print(unique_sweets)

# Output
['cake', 'cheesecake', 'candy', 'cupcake', 'lollipop']

Utilizați elementele din listă ca chei de dicționar pentru a elimina duplicatele

Dicționarul Python este o colecție de perechi cheie-valoare în care cheile identifică în mod unic valorile.

Puteți crea un dicționar Python folosind metoda .fromkeys() cu sintaxa: dict.fromkeys(keys, values). Aici, cheile și valorile sunt iterabile care conțin cheile și, respectiv, valorile dicționarului.

  • keys este un parametru obligatoriu și poate fi orice iterabil Python corespunzătoare cheilor dicționarului.
  • valorile este un parametru opțional. Dacă nu specificați valorile care pot fi iterabile, este utilizată valoarea implicită None.

Fără a specifica valorile, dict.fromkeys(sweets) returnează un dicționar Python în care valorile sunt setate la None – valoarea implicită. Celula de cod de mai jos explică acest lucru.

dict.fromkeys(sweets)

# Output
{'cake': None,
 'candy': None,
 'cheesecake': None,
 'cupcake': None,
 'lollipop': None}

Ca și în secțiunea anterioară, putem converti din nou dicționarul într-o listă, așa cum se arată mai jos.

unique_sweets = list(dict.fromkeys(sweets))
print(unique_sweets)
# Output
['cupcake', 'candy', 'lollipop', 'cake', 'cheesecake']

Din rezultatul de mai sus, putem vedea că articolele duplicate au fost eliminate din lista dulciurilor.

Rezumând👩‍🏫

Iată o recapitulare a diferitelor metode pe care le puteți utiliza pentru a elimina elementele duplicate sau repetițiile din listele Python.

  • Utilizați metoda listei Python .append() pentru a adăuga elemente care nu se repetă la o listă nouă. Noua listă conține fiecare articol din lista originală exact o dată și elimină toate repetările. Puteți face acest lucru și folosind înțelegerea listei.
  • Utilizați metodele încorporate .count() și .remove() pentru a elimina elementele care apar exact de două ori. Același lucru poate fi plasat într-o buclă while pentru a elimina toate aparițiile suplimentare.
  • Transmite o listă Python într-un set pentru a păstra doar elementele unice.
  • Utilizați dict.fromkeys(list) pentru a elimina orice duplicat din listă, deoarece nu ar trebui să existe chei de repetiție ale dicționarului.

Apoi, consultați proiectele Python pentru a exersa și a învăța. Sau aflați cum să găsiți indexul unui element în listele Python. Învățare fericită!