5 metod usuwania zduplikowanych elementów z list Pythona

W tym samouczku dowiesz się, jak usunąć zduplikowane elementy z list Pythona.

Kiedy pracujesz z listami w Pythonie, czasami możesz potrzebować pracować tylko z unikalnymi pozycjami na liście – usuwając duplikaty.

Możesz to zrobić na kilka różnych sposobów. W tym samouczku omówimy pięć takich technik.

Podstawy list Pythona

Zacznijmy naszą dyskusję od zapoznania się z podstawami list Pythona.

Listy Pythona są zmienny. Możesz więc modyfikować je na miejscu, dodając i usuwając elementy z listy. Ponadto listy Pythona są zbiorami elementów niekoniecznie unikalnych.

Jak więc zachować tylko unikalne elementy i usunąć zduplikowane lub powtarzające się elementy?

Cóż, możesz to zrobić na kilka różnych sposobów. Możesz utworzyć nową listę, która zawiera tylko unikalne elementy z oryginalnej listy. Możesz też zmodyfikować oryginalną listę na miejscu i usunąć zduplikowane elementy.

Dowiemy się o nich szczegółowo w tym samouczku.

Metody usuwania duplikatów z list Pythona

Weźmy przykład ze świata rzeczywistego. Załóżmy, że jesteś na przyjęciu urodzinowym przyjaciela.🎊🎉

W wyświetlanej kolekcji słodyczy widać, że niektóre elementy się powtarzają. Teraz chcesz usunąć te zduplikowane pozycje z listy słodyczy.

Stwórzmy listę słodyczy zawierającą wszystkie elementy na powyższym obrazku.

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

W powyższej liście słodyczy pozycje „cukierek” i „cupcake” są powtórzone dwukrotnie. Użyjmy tej przykładowej listy, aby usunąć zduplikowane elementy.

Iteruj po listach Pythona, aby usunąć duplikaty

Najprostszą metodą jest utworzenie nowej listy zawierającej każdy element dokładnie raz.

Przeczytaj poniższą komórkę kodu:

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']
  • Inicjujemy pustą listę unique_sweets.
  • Przeglądając listę słodyczy, uzyskujemy dostęp do każdego słodyczy.
  • Jeśli słodycz nie jest już obecna na liście unique_sweets, dodajemy ją na końcu listy unique_sweets za pomocą metody .append().

Załóżmy, że natkniesz się na powtarzający się element, na przykład drugie wystąpienie słowa „cukierek” na liście słodyczy. Nie jest to dodawane do listy unique_sweets, ponieważ już jest obecne: sweet not in unique_sweets oceniane jako False dla drugiego wystąpienia słów „cupcake” i „candy”.

Dlatego w tej metodzie każdy element występuje dokładnie raz na liście unique_sweets — bez żadnych powtórzeń.

Użyj zrozumienia listy, aby usunąć duplikaty

Możesz również użyć rozumienia listy, aby wypełnić listę unique_sweets.

Chcesz odświeżyć podstawy rozumienia list?

▶️ Sprawdź samouczek dotyczący rozumienia list w Pythonie.

Użyjmy wyrażenia listowego: [output for item in iterable if condition is True] aby zwięźle przepisać powyższą pętlę.

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']

Nawet jeśli tworzysz nową listę, nie wypełniasz utworzonej listy wartościami. Dzieje się tak, ponieważ wyjściem jest operacja .append() na liście unique_sweets.

Aby usunąć zduplikowane elementy z list Pythona, możesz również użyć wbudowanych metod listowych, omówimy to w następnej sekcji.

Użyj wbudowanych metod list, aby usunąć duplikaty

Możesz użyć metod list Pythona .count() i .remove(), aby usunąć zduplikowane elementy.

– W przypadku składni list.count(value) metoda .count() zwraca liczbę wystąpień wartości w liście. Tak więc liczba odpowiadająca powtarzającym się elementom będzie większa niż 1.

– list.remove(value) usuwa pierwsze wystąpienie wartości z listy.

Korzystając z powyższego, mamy następujący kod.

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']

Ponieważ metoda .remove() usuwa tylko pierwsze wystąpienie wartości, nie można jej używać do usuwania elementów, które występują więcej niż dwa razy.

  • Jeśli określony element jest zduplikowany (występuje dokładnie dwa razy), ta metoda usuwa pierwsze wystąpienie.
  • Jeśli dana pozycja zostanie powtórzona K razy, to po uruchomieniu powyższego kodu, powtórzenia K-1 nadal pozostaną.

Ale generalnie, kiedy mówimy duplikaty, zwykle odnosimy się do wszystkich powtórzeń.

Aby poradzić sobie z tym przypadkiem, możesz zmodyfikować powyższą pętlę, aby usunąć wszystkie powtórzenia z wyjątkiem jednego. Zamiast używać warunkowego warunkowego sprawdzania liczby określonego elementu, możesz uruchomić pętlę while, aby wielokrotnie usuwać duplikaty, dopóki liczba każdego elementu na liście nie wyniesie 1.

Lista słodyczy zawiera teraz 2 powtórzenia „cupcake” i 3 powtórzenia „cukierków”.

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

Możesz użyć pętli while, aby usunąć powtórzenia, jak pokazano poniżej. Pętla while działa tak długo, jak długo liczba słodyczy w słodyczach jest większa niż 1. Gdy pozostaje tylko jedno wystąpienie, warunek sweets.count(sweet) > 1 staje się False, a pętla przechodzi do następnego elementu.

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']

Ale używanie pętli zagnieżdżonych może nie być zbyt wydajne, więc możesz rozważyć użycie jednej z innych omówionych technik, jeśli pracujesz z dużymi listami.

Do tej pory dowiedzieliśmy się, co następuje:

  • Metody usuwania zduplikowanych pozycji z list Pythona — poprzez tworzenie nowych list — zawierających tylko unikalne elementy
  • Wbudowane metody list .count() i .remove() do modyfikacji listy w miejscu

Istnieje kilka wbudowanych struktur danych Pythona, które wymagają, aby wszystkie wartości były unikalne — bez powtarzania. Dlatego możemy rzutować listę Pythona na jedną z tych struktur danych, aby usunąć duplikaty. A następnie przekonwertuj je z powrotem na listę. W kolejnych sekcjach dowiemy się, jak to zrobić.

Przerzuć listę Pythona w zestaw, aby usunąć duplikaty

Zestawy Pythona to kolekcje elementów, które są unikalne. Dlatego liczba elementów obecnych w zestawie (podana przez len() jest równa liczbie obecnych unikalnych elementów.

Możesz rzutować dowolny iterowalny Python do zestawu, używając składni: set(iterable).

Teraz wrzućmy listę słodyczy do zestawu i przyjrzyjmy się wynikom.

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

Z danych wyjściowych w powyższej komórce kodu widzimy, że każdy element pojawia się dokładnie raz, a duplikaty zostały usunięte.

Zauważ też, że kolejność elementów niekoniecznie jest taka sama, jak ich kolejność w oryginalnej liście słodyczy. Dzieje się tak dlatego, że poza tym, że jest kolekcją unikalnych elementów, obiekt zbioru Pythona jest kolekcją nieuporządkowaną.

Teraz, gdy usunęliśmy duplikaty, przesyłając listę do zestawu, możemy ponownie przekonwertować ją na listę, jak pokazano poniżej.

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

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

Użyj pozycji listy jako klawiszy słownika do usuwania duplikatów

Słownik Pythona to zbiór par klucz-wartość, w których klucze jednoznacznie identyfikują wartości.

Możesz utworzyć słownik Pythona za pomocą metody .fromkeys() ze składnią: dict.fromkeys(klucze, wartości). Tutaj klucze i wartości są iteracjami zawierającymi odpowiednio klucze i wartości słownika.

  • keys jest parametrem wymaganym i może to być dowolny element iteracyjny Pythona odpowiadający kluczom słownika.
  • wartości to parametr opcjonalny. Jeśli nie określisz wartości iterowalnych, zostanie użyta wartość domyślna Brak.

Bez określania wartości, dict.fromkeys(sweets) zwraca słownik Pythona, w którym wartości są ustawione na Brak – wartość domyślną. Poniższa komórka kodu wyjaśnia to.

dict.fromkeys(sweets)

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

Podobnie jak w poprzedniej sekcji, możemy ponownie przekonwertować słownik na listę, jak pokazano poniżej.

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

Z powyższego wyniku widzimy, że zduplikowane elementy zostały usunięte z listy słodyczy.

Podsumowując👩‍🏫

Oto podsumowanie różnych metod, których możesz użyć do usunięcia zduplikowanych elementów lub powtórzeń z list Pythona.

  • Użyj metody listy Pythona .append(), aby dodać niepowtarzające się elementy do nowej listy. Nowa lista zawiera każdy element z oryginalnej listy dokładnie raz i usuwa wszystkie powtórzenia. Możesz to również zrobić za pomocą rozumienia listy.
  • Użyj wbudowanych metod .count() i .remove(), aby usunąć elementy, które występują dokładnie dwa razy. To samo można umieścić w pętli while, aby usunąć wszystkie dodatkowe wystąpienia.
  • Przekształć listę Pythona w zestaw, aby zachować tylko unikalne elementy.
  • Użyj dict.fromkeys(list), aby usunąć wszelkie duplikaty z listy, ponieważ nie powinno być żadnych kluczy powtórzeń słownika.

Następnie sprawdź projekty Pythona, aby ćwiczyć i uczyć się. Lub dowiedz się, jak znaleźć indeks elementu w listach Pythona. Miłej nauki!