Jak usunąć duplikaty z listy w Python

⚡ Inteligentne podsumowanie

Usuwanie duplikatów z Python Listę można utworzyć za pomocą kilku wbudowanych podejść, w tym set(), dict.fromkeys(), pętli, wyrażeń listowych i metod bibliotecznych z NumPy i Pandas, z których każde równoważy zachowanie kolejności z szybkością.

  • 🔘 Metoda ustawiania: set() natychmiast zwraca różne elementy, ale nie zachowuje oryginalnej kolejności listy.
  • ️ Kolejność zachowana: dict.fromkeys() i OrderedDict usuwają duplikaty, podczas gdy keeping pierwsze zaobserwowane zamówienie na wstawienie.
  • ✅ Sterowanie ręczne: Pętla for lub wyrażenie listy ze sprawdzeniem członkostwa zachowuje kolejność i umożliwia odczytanie.
  • 🧪 Metody biblioteczne: Metody NumPy unique() i Pandas unique() usuwają duplikaty danych i zwracają listę wyników za pomocą metody tolist().
  • 🛠️. Granica haszowalności: Klucze set i dict wymagają elementów haszujących, dlatego listy lub słowniki wymagają podejścia opartego na pętli.
  • 🤖 Przepływy pracy AI: Procesy uczenia maszynowego usuwają duplikaty danych treningowych za pomocą funkcji Pandas drop_duplicates(), aby zapobiec stronniczości i wyciekom danych.

Usuń duplikaty z listy w Python

Python usuń duplikaty z listy

Lista to kontener zawierający różne elementy Python obiekty, którymi mogą być liczby całkowite, słowa, wartości itp. Jest to odpowiednik tablicy w innych językach programowania.

Tutaj przejdziemy przez różne sposoby usuwania duplikatów z danej listy w Python.

Metoda 1) Usuń duplikaty z listy za pomocą Set

Aby usunąć duplikaty z listy, możesz skorzystać z wbudowanej funkcji set(). Cechą charakterystyczną metody set() jest to, że zwraca ona odrębne elementy.

Mamy listę: [1,1,2,3,2,2,4,5,6,2,1]. Lista zawiera wiele duplikatów, które musimy usunąć i odzyskać tylko odrębne elementy. Lista jest przekazywana do wbudowanej funkcji set(). Later lista końcowa wyświetlana jest za pomocą wbudowanej funkcji list().

Wynikiem są odrębne elementy, w których wyeliminowano wszystkie powtarzające się elementy.

Przykład

my_list = [1,1,2,3,2,2,4,5,6,2,1]
my_final_list = set(my_list)
print(list(my_final_list))

Wyjście:

[1, 2, 3, 4, 5, 6]

Metoda 2) Korzystanie z listy tymczasowej

Aby usunąć duplikaty z danej listy, możesz skorzystać z pustej listy tymczasowej. W tym celu najpierw musisz przejść przez listę zawierającą duplikaty i dodać unikatowe elementy do listy tymczasowej. Later lista tymczasowa jest przypisana do listy głównej.

Przykład

Oto działający przykład użycia listy tymczasowej.

my_list = [1, 2, 3, 1, 2, 4, 5, 4 ,6, 2]
print("List Before ", my_list)
temp_list = []

for i in my_list:
    if i not in temp_list:
        temp_list.append(i)

my_list = temp_list

print("List After removing duplicates ", my_list)

Wyjście:

List Before  [1, 2, 3, 1, 2, 4, 5, 4, 6, 2]
List After removing duplicates  [1, 2, 3, 4, 5, 6]

Metoda 3) Korzystanie z Dict

Możemy usunąć duplikaty z podanej listy, importując OrderedDict z kolekcji. Jest on dostępny od wersji Python 2.7. OrderedDict zwraca unikatowe elementy w kolejności, w jakiej występuje klucz.

Skorzystajmy z listy i zastosujmy metodę fromkeys() dostępną w OrderedDict, aby pobrać unikalne elementy z listy.

Aby skorzystać z metody OrderedDict.fromkeys(), należy zaimportować OrderedDict z kolekcji, jak pokazano poniżej:

from collections import OrderedDict

Oto przykład usuwania duplikatów za pomocą metody OrderedDict.fromkeys().

Przykład

from collections import OrderedDict

my_list = ['a','x','a','y','a','b','b','c']

my_final_list = OrderedDict.fromkeys(my_list)

print(list(my_final_list))

Wyjście:

['a', 'x', 'y', 'b', 'c']

Od Python Od wersji 3.5 i nowszych możemy skorzystać ze standardowej metody dict.fromkeys(), aby uzyskać unikalne elementy z listy. Metoda dict.fromkeys() zwraca unikalne klucze i pomaga pozbyć się duplikatów wartości.

Przykład pokazujący działanie funkcji dict.fromkeys() na liście w celu uzyskania unikalnych elementów jest następujący:

Przykład

my_list = ['a','x','a','y','a','b','b','c']
my_final_list = dict.fromkeys(my_list)
print(list(my_final_list))

Wyjście:

['a', 'x', 'y', 'b', 'c']

Metoda 4) Użycie pętli for

Korzystanie z dla pętli, przeszukamy listę elementów, aby usunąć duplikaty.

Najpierw zainicjuj tablicę do postaci pustej, np. myFinallist = []. Wewnątrz pętli for dodaj sprawdzenie, czy elementy listy istnieją w tablicy myFinallist. Jeśli elementy nie istnieją, dodaj je do tablicy myFinallist za pomocą metody append().

Zatem za każdym razem, gdy napotkamy duplikat, będzie on już obecny w tablicy myFinallist i nie zostanie wstawiony. Sprawdźmy to samo w poniższym przykładzie:

Przykład

my_list = [1,2,2,3,1,4,5,1,2,6]
myFinallist = []
for i in my_list:
    if i not in myFinallist:
myFinallist.append(i)
print(list(myFinallist))

Wyjście:

[1, 2, 3, 4, 5, 6]

Metoda 5) Korzystanie ze rozumienia list

Rozwiązania listowe są Python funkcje służące do tworzenia nowych ciągów (takich jak listy, słowniki itp.) z wykorzystaniem już utworzonych sekwencji. Pomaga to zredukować dłuższe pętle i ułatwia czytanie i konserwację kodu.

Użyjmy rozumienia list, aby usunąć duplikaty z podanej listy.

Przykład

my_list = [1,2,2,3,1,4,5,1,2,6]
my_finallist = []
[my_finallist.append(n) for n in my_list if n not in my_finallist]
print(my_finallist)

Wyjście:

[1, 2, 3, 4, 5, 6]

Metoda 6) Użycie metody unique() biblioteki NumPy

Metoda unique() z modułu NumPy może nam pomóc usunąć duplikaty z podanej listy.

Aby pracować z NumPy, najpierw zaimportuj moduł numpy:

Krok 1) Importuj moduł NumPy

import numpy as np

Krok 2) Użyj listy z duplikatami w metodzie unique(). Dane wyjściowe są konwertowane z powrotem na listę za pomocą metody tolist().

myFinalList = np.unique(my_list).tolist()

Krok 3) Na koniec wydrukuj listę:

print(myFinalList)

Ostateczny kod z danymi wyjściowymi wygląda następująco:

import numpy as np
my_list = [1,2,2,3,1,4,5,1,2,6]
myFinalList = np.unique(my_list).tolist()
print(myFinalList)

Wyjście:

[1, 2, 3, 4, 5, 6]

Metoda 7) Korzystanie z metod Pand

Moduł Pandas posiada metodę Unique(), która poda nam unikalne elementy z podanej listy.

Aby pracować z modułem Pandas:

Krok 1) Importuj moduł Pandy

import pandas as pd

Krok 2) Użyj listy z duplikatami wewnątrz metody unique():

myFinalList = pd.unique(my_list).tolist()

Krok 3) Wydrukuj listę:

print(myFinalList)

Ostateczny kod z danymi wyjściowymi wygląda następująco:

import pandas as pd

my_list = [1,2,2,3,1,4,5,1,2,6]
myFinalList = pd.unique(my_list).tolist()
print(myFinalList)

Wyjście:

[1, 2, 3, 4, 5, 6]

Metoda 8) Używanie funkcji enumerate() i rozumienia list

Tutaj używamy połączenia funkcji list comprehension i enumerate(), aby usunąć zduplikowane elementy. Funkcja enumerate zwraca obiekt z licznikiem dla każdego elementu na liście. Na przykład (0,1), (1,2) itd. Tutaj pierwsza wartość to indeks, a druga to element listy.

Sprawdzane jest, czy każdy element znajduje się na liście. Jeśli tak, zostaje usunięty z listy.

Przykład

my_list = [1,2,2,3,1,4,5,1,2,6]
my_finallist = [i for j, i in enumerate(my_list) if i not in my_list[:j]]
print(list(my_finallist))

Wyjście:

[1, 2, 3, 4, 5, 6]

FAQ

Nie. Zbiór to kolekcja nieuporządkowana, więc set() może zwracać elementy w innej kolejności. Aby usunąć duplikaty, zachowując kolejność, użyj dict.fromkeys() lub pętli, która dołącza tylko te elementy, które jeszcze nie zostały wyświetlone.

W przypadku dużych list funkcja set() jest najszybsza, gdy kolejność nie ma znaczenia, ponieważ sprawdzanie przynależności jest O(1). Gdy kolejność ma znaczenie, funkcja list(dict.fromkeys(my_list)) jest niemal tak samo szybka i zachowuje kolejność wyświetlania w jednym wierszu.

set() i dict.fromkeys() wymagają elementów haszowalnych, więc ich działanie na listach lub słownikach kończy się niepowodzeniem. Przejrzyj listę i dołącz elementy, których jeszcze nie widziałeś, lub przekonwertuj każdy element na krotkę lub ciąg JSON jako klucz tymczasowy.

Użyj listy(dict.fromkeys(my_list)). Ponieważ Python Słowniki 3.7 zachowują kolejność wstawiania, więc klucze pozostają w kolejności od pierwszego do pierwszego. We wcześniejszych wersjach, aby uzyskać ten sam efekt, należy użyć collections.OrderedDict.fromkeys().

Nie. Metody takie jak set(), dict.fromkeys(), comprehensions oraz NumPy lub Pandas unique() tworzą nową listę i pozostawiają kod źródłowy bez zmian. Przypisz wynik ponownie do tej samej zmiennej, jeśli chcesz go nadpisać.

Użyj numpy.unique() lub pandas.unique(), gdy dane znajdują się już w tablicach lub seriach, albo podczas analizy danych. Uwaga: numpy.unique() sortuje również wartości, podczas gdy pandas.unique() zachowuje kolejność wyświetlania. Aby uzyskać prostą listę, wywołaj tolist().

Procesy uczenia maszynowego usuwają zduplikowane wiersze przed rozpoczęciem treningu, dzięki czemu powtarzane próbki nie powodują odchyleń modelu ani nie powodują przecieków między zbiorami treningowymi i testowymi. Funkcja drop_duplicates() w Pandas to popularne narzędzie do czyszczenia tabelarycznych zestawów danych.

Tak. GitHub Copilot i asystenci AI generują set(), dict.fromkeys() lub kod deduplikacji Pandas na podstawie komentarza, sugerują opcję zachowania kolejności i refaktoryzują pętle, choć nadal należy weryfikować przypadki brzegowe, takie jak elementy niemożliwe do haszowania.

Podsumuj ten post następująco: