W tym poradniku odkryjesz, jak wyeliminować powtarzające się elementy z list w języku Python.
Podczas pracy z listami w Pythonie, często pojawia się potrzeba operowania wyłącznie na unikalnych elementach, co wiąże się z koniecznością usunięcia duplikatów.
Istnieje szereg podejść, aby tego dokonać. W niniejszym artykule przyjrzymy się pięciu różnym technikom.
Podstawowe informacje o listach w Pythonie
Zacznijmy od omówienia fundamentalnych aspektów list w Pythonie.
Listy w Pythonie są mutowalne. Oznacza to, że można je modyfikować bezpośrednio, dodając i usuwając z nich elementy. Listy w Pythonie mogą zawierać elementy, które niekoniecznie są unikalne.
Jak zatem zachować tylko niepowtarzalne elementy i pozbyć się duplikatów?
Można to zrobić na kilka sposobów. Można utworzyć nową listę, która będzie zawierała wyłącznie unikalne elementy z listy początkowej. Inną opcją jest modyfikacja oryginalnej listy i usunięcie z niej powtórzeń.
W dalszej części artykułu szczegółowo omówimy te metody.
Sposoby usuwania duplikatów z list w Pythonie
Rozważmy przykład z życia. Wyobraźmy sobie, że jesteś na przyjęciu urodzinowym u przyjaciela. 🎊🎉
Wśród dostępnych słodkości widzisz, że niektóre z nich się powtarzają. Chcesz usunąć te zdublowane elementy z listy smakołyków.
Stwórzmy listę zawierającą wszystkie słodycze widoczne na obrazku.
sweets = ["cupcake","candy","lollipop","cake","lollipop","cheesecake","candy","cupcake"]
Na powyższej liście „cukierek” i „babeczka” występują po dwa razy. Wykorzystajmy tę listę, aby usunąć powtórzenia.
Iteracja po listach Pythona w celu usunięcia duplikatów
Najprostszym podejściem jest utworzenie nowej listy, w której każdy element wystąpi tylko raz.
Przeanalizuj poniższy kod:
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']
- Inicjalizujemy pustą listę o nazwie unique_sweets.
- Przechodząc przez listę słodyczy, uzyskujemy dostęp do każdego elementu.
- Jeśli dany element nie znajduje się jeszcze na liście unique_sweets, zostaje on dodany na jej koniec za pomocą metody .append().
Załóżmy, że napotkasz powtarzający się element, taki jak drugie wystąpienie słowa „cukierek” na liście. Nie zostanie on dodany do listy unique_sweets, ponieważ już tam istnieje: warunek `sweet not in unique_sweets` zwróci wartość False dla drugiego wystąpienia „babeczki” i „cukierka”.
Dzięki temu, w tej metodzie każdy element na liście unique_sweets występuje dokładnie raz – bez żadnych powtórzeń.
Usuwanie duplikatów za pomocą składni list
Możesz również skorzystać ze składni list, aby wypełnić listę unique_sweets.
Potrzebujesz przypomnienia o podstawach składni list?
▶️ Zapoznaj się z tutorialem dotyczącym składni list w Pythonie.
Użyjmy wyrażenia listowego: `[output for item in iterable if condition is True]` aby zwięźle zapisać 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']
Mimo tworzenia nowej listy, nie wypełniasz jej bezpośrednio wartościami. Dzieje się tak, ponieważ wynikiem jest operacja `.append()` na liście unique_sweets.
Aby usunąć zduplikowane elementy z list w Pythonie, można również wykorzystać wbudowane metody list, co zostanie omówione w kolejnej sekcji.
Usuwanie duplikatów za pomocą wbudowanych metod list
Możesz użyć metod `.count()` i `.remove()` w Pythonie, aby pozbyć się duplikatów.
– Metoda `list.count(value)` zwraca liczbę wystąpień danej wartości na liście. Zatem liczba powtórzeń będzie większa niż 1.
– Metoda `list.remove(value)` usuwa pierwsze wystąpienie wartości z listy.
Wykorzystując powyższe, uzyskujemy następujący kod.
for sweet in sweets: # sprawdź, czy liczba wystąpień słodyczy jest > 1 (powtarzający się element) if sweets.count(sweet) > 1: # jeśli prawda, usuń pierwsze wystąpienie słodyczy 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żyć do usunięcia elementów, które występują więcej niż dwa razy.
- Jeśli dany element jest duplikatem (występuje dokładnie dwa razy), ta metoda usunie jego pierwsze wystąpienie.
- Jeśli dany element powtórzy się K razy, to po wykonaniu powyższego kodu, nadal pozostanie K-1 powtórzeń.
Jednak w kontekście duplikatów, zazwyczaj mamy na myśli wszystkie powtórzenia.
Aby poradzić sobie z taką sytuacją, możesz zmodyfikować powyższą pętlę tak, aby usuwała wszystkie powtórzenia poza jednym. Zamiast sprawdzać warunkowo liczbę wystąpień danego elementu, możesz zastosować pętlę `while`, aby wielokrotnie usuwać duplikaty, aż liczba każdego elementu na liście wyniesie 1.
Lista słodyczy zawiera teraz 2 powtórzenia „babeczki” i 3 powtórzenia „cukierków”.
sweets = ["cupcake","candy","lollipop","cake","lollipop","candy","cheesecake","candy","cupcake"]
Możesz użyć pętli `while` do usunięcia powtórzeń, jak pokazano poniżej. Pętla `while` działa tak długo, jak liczba wystąpień danego elementu jest większa niż 1. Gdy pozostanie tylko jedno wystąpienie, warunek `sweets.count(sweet) > 1` staje się fałszywy, a pętla przechodzi do kolejnego elementu.
for sweet in sweets: # sprawdź, czy liczba wystąpień słodyczy jest > 1 (powtarzający się element) while(sweets.count(sweet) > 1): # wielokrotnie usuwaj pierwsze wystąpienie słodyczy, aż pozostanie tylko jedno. sweets.remove(sweet) print(sweets) # Output ['cake', 'lollipop', 'cheesecake', 'candy', 'cupcake']
Jednak używanie zagnieżdżonych pętli może nie być zbyt efektywne, więc jeśli pracujesz z dużymi listami, rozważ skorzystanie z jednej z wcześniej omówionych technik.
Do tej pory dowiedzieliśmy się:
- Jak usuwać powtarzające się elementy z list w Pythonie poprzez tworzenie nowych list – zawierających tylko unikalne elementy.
- Jak wykorzystać wbudowane metody `.count()` i `.remove()` do modyfikacji listy w miejscu.
Istnieje kilka wbudowanych struktur danych w Pythonie, które wymagają, aby wszystkie wartości były unikalne – bez powtórzeń. Możemy zatem przekształcić listę w jedną z tych struktur danych, aby usunąć duplikaty. Następnie możemy przekształcić ją z powrotem na listę. W kolejnych sekcjach dowiesz się, jak to zrobić.
Konwersja listy Pythona na zbiór w celu usunięcia duplikatów
Zbiory w Pythonie to kolekcje unikalnych elementów. Oznacza to, że liczba elementów w zbiorze (określana przez `len(
Każdy iterowalny obiekt w Pythonie można przekształcić na zbiór za pomocą składni: `set(iterable)`.
Przekształćmy listę słodyczy na zbiór i zobaczmy, co się stanie.
set(sweets) # Output {'cake', 'candy', 'cheesecake', 'cupcake', 'lollipop'}
Z powyższego kodu widzimy, że każdy element występuje dokładnie raz, a duplikaty zostały usunięte.
Należy również zauważyć, że kolejność elementów nie jest taka sama jak w pierwotnej liście słodyczy. Dzieje się tak dlatego, że poza tym, że zbiór jest kolekcją unikalnych elementów, jest on również kolekcją nieuporządkowaną.
Po usunięciu duplikatów poprzez przekształcenie listy w zbiór, możemy ponownie przekształcić ją na listę, jak pokazano poniżej.
unique_sweets = list(set(sweets)) print(unique_sweets) # Output ['cake', 'cheesecake', 'candy', 'cupcake', 'lollipop']
Wykorzystanie kluczy słownika do usuwania duplikatów
Słownik w Pythonie to zbiór par klucz-wartość, gdzie klucze jednoznacznie identyfikują wartości.
Słownik w Pythonie można utworzyć za pomocą metody `.fromkeys()` ze składnią: `dict.fromkeys(klucze, wartości)`. Tutaj klucze i wartości są iterowalnymi elementami zawierającymi odpowiednio klucze i wartości słownika.
- `klucze` jest parametrem wymaganym i może być dowolnym iterowalnym elementem w Pythonie, odpowiadającym kluczom słownika.
- `wartości` jest parametrem opcjonalnym. Jeśli nie zostaną określone wartości iterowalne, użyta zostanie domyślna wartość None.
Bez określania wartości, `dict.fromkeys(sweets)` zwraca słownik, w którym wartości są ustawione na None – wartość domyślna. Ilustruje to poniższy kod.
dict.fromkeys(sweets) # Output {'cake': None, 'candy': None, 'cheesecake': None, 'cupcake': None, 'lollipop': None}
Podobnie jak w poprzedniej sekcji, możemy przekształcić słownik z powrotem na listę, jak pokazano poniżej.
unique_sweets = list(dict.fromkeys(sweets)) print(unique_sweets) # Output ['cupcake', 'candy', 'lollipop', 'cake', 'cheesecake']
Z powyższego rezultatu widzimy, że zduplikowane elementy zostały usunięte z listy słodyczy.
Podsumowanie👩🏫
Oto podsumowanie różnych metod, których można użyć do usunięcia duplikatów z list w Pythonie.
- Użyj metody listy `.append()`, aby dodawać unikalne elementy do nowej listy. Nowa lista będzie zawierała każdy element z pierwotnej listy tylko raz i usunie wszystkie powtórzenia. Można to także osiągnąć za pomocą składni list.
- Użyj wbudowanych metod `.count()` i `.remove()`, aby usuwać elementy, które występują dokładnie dwa razy. Można to umieścić w pętli `while`, aby usuwać wszystkie dodatkowe wystąpienia.
- Przekształć listę Pythona w zbiór, aby zachować tylko unikalne elementy.
- Użyj `dict.fromkeys(list)` aby usunąć duplikaty z listy, ponieważ słownik nie może zawierać powtarzających się kluczy.
Następnie przećwicz swoje umiejętności i wiedzę na projektach w Pythonie. Możesz również dowiedzieć się, jak znaleźć indeks elementu na liście w Pythonie. Miłej nauki!