Jak usunąć duplikaty z listy w Pythonie

Dowiedz się, jak usunąć duplikaty z listy w Pythonie, zachowując lub ignorując porządek. Porównaj konwersje zestawów, klawisze dyktowania i metody pętli.

Wypróbuj to rozwiązanie w Edytorze

Przegląd

Zduplikowane dane często wkradają się na listy poprzez pobieranie baz danych, interakcje użytkowników lub agregacje dzienników. Usunięcie tych duplikatów to podstawowy etap czyszczenia danych, który zapewnia unikalność i zapobiega redundancji w logice dalszego ciągu. Python udostępnia kilka technik umożliwiających osiągnięcie tego celu, począwszy od szybkich konwersji zestawów po operacje oparte na pętlach, które uwzględniają kolejność elementów.

Najszybszym i najczęstszym sposobem wyeliminowania zduplikowanych elementów jest przekształcenie listy w „zestaw” za pomocą konstruktora „set()”, a następnie przekształcenie jej z powrotem w listę. Ponieważ zestawy nie mogą zawierać zduplikowanych wartości, proces ten automatycznie odrzuca duplikaty. Wadą tego podejścia jest to, że zbiory są nieuporządkowane, co oznacza, że ​​pierwotna sekwencja elementów zostaje utracona.

Aby zachować oryginalną kolejność elementów podczas usuwania duplikatów,Python 3.7+ oferuje sprytne rozwiązanie wykorzystujące wbudowaną klasę słownika: `list(dict.fromkeys(my_list))`. Ponieważ klucze słownika są unikalne i zachowują kolejność wstawiania, ta metoda skutecznie usuwa duplikaty elementów, zachowując nienaruszoną sekwencję. W przypadku kryteriów niestandardowych lub starszych wersji Pythona bardzo skuteczna jest również ręczna pętla wykorzystująca zestaw pomocniczy do śledzenia widzianych elementów.

Dane wyjściowe kodu i wykonania

Ten skrypt demonstruje deduplikację elementów listy przy użyciu zestawów, kluczy słownikowych i pętli ręcznych.

deduplicate_list.py
Spróbuj w Edytorze
numbers = [2, 1, 2, 3, 1, 4]

# Method 1: Using set() (Unordered)
unique_unordered = list(set(numbers))
print("Unordered unique:", unique_unordered)

# Method 2: Using dict.fromkeys() (Preserves order)
unique_ordered = list(dict.fromkeys(numbers))
print("Ordered unique:", unique_ordered)

# Method 3: Using a loop with a seen helper
seen = set()
unique_loop = []
for item in numbers:
    if item not in seen:
        seen.add(item)
        unique_loop.append(item)
print("Loop unique:", unique_loop)
Wyjście terminala
Unordered unique: [1, 2, 3, 4]
Ordered unique: [2, 1, 3, 4]
Loop unique: [2, 1, 3, 4]

Wdrażanie krok po kroku

  • Przekonwertuj listę na zestaw, aby natychmiast usunąć duplikaty za pomocą set(my_list).
  • Użyj list(dict.fromkeys(my_list)), aby usunąć duplikaty, zachowując kolejność wstawiania.
  • Użyj zestawu pomocniczego w pętli, aby odfiltrować duplikaty, jeśli potrzebujesz niestandardowej weryfikacji.

Często zadawane pytania

Która metoda jest najszybsza w przypadku dużych list?

Konwersja na zestaw jest najszybsza dzięki optymalizacji na poziomie C, a zaraz po niej następuje dict.fromkeys().

Jak zdeduplikować listę słowników?

Ponieważ słowniki nie podlegają haszowaniu, nie można bezpośrednio używać zestawów. Musisz użyć pętli lub filtrowania ze zrozumieniem listy według unikalnych identyfikatorów/kluczy.

Powiązane tematy

Polecane zasoby Pythona

Poszerzaj swoją wiedzę dzięki powiązanym interaktywnym samouczkom, ściągawkom i porównaniom kodów.