Как да премахнете дубликати от списък в Python

⚡ Умно обобщение

Премахване на дубликати от Python Списъкът може да се направи с няколко вградени подхода, включително set(), dict.fromkeys(), цикли, разбиране на списъци и библиотечни методи от NumPy и Pandas, като всеки балансира запазването на реда спрямо скоростта.

  • 🔘 Метод на задаване: set() връща отделни елементи незабавно, но не запазва оригиналния ред на списъка.
  • ☑️ Запазена поръчка: dict.fromkeys() и OrderedDict премахват дубликати, докато keeping първата видяна поръчка за вмъкване.
  • Ръчно управление: Цикъл for или списък с разбиране с проверка за членство поддържа реда и остава четим.
  • 🧪 Библиотечни методи: NumPy unique() и Pandas unique() дедуплицират данни и връщат списък чрез метода tolist().
  • 🛠️ Лимит на хешируемост: Ключовете set и dict изискват хешируеми елементи, така че списъците или речниците се нуждаят от подход, базиран на цикъл.
  • 🤖 Работни процеси с изкуствен интелект: Конвейерите за машинно обучение дедублират обучителните данни с Pandas drop_duplicates(), за да предотвратят изтичане на данни и отклонения.

Премахване на дубликати от списък в Python

Python премахване на дубликати от списък

Списъкът е контейнер, който съдържа различни Python обекти, които могат да бъдат цели числа, думи, стойности и т.н. Това е еквивалент на масив в други езици за програмиране.

Така че тук ще разгледаме различни начини, по които можем да премахнем дубликати от даден списък в Python.

Метод 1) Премахнете дубликатите от списъка с помощта на Set

За да премахнете дубликатите от списък, можете да използвате вградената функция set(). Специалното на метода set() е, че той връща различни елементи.

Имаме списък: [1,1,2,3,2,2,4,5,6,2,1]. Списъкът има много дубликати, които трябва да премахнем и да получим само отделните елементи. Списъкът е даден на вградената функция set(). Later Крайният списък се показва с помощта на вградената функция list().

Резултатът, който получаваме, са отделни елементи, където всички дублиращи се елементи са елиминирани.

Пример

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

Изход:

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

Метод 2) Използване на временния списък

За да премахнете дубликати от даден списък, можете да използвате празен временен списък. За целта първо ще трябва да прегледате списъка с дубликати и да добавите уникалните елементи към временния списък. Later временният списък се присвоява на основния списък.

Пример

Ето един работещ пример, използващ временен списък.

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)

Изход:

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

Метод 3) Използване на Dict

Можем да премахнем дубликати от дадения списък, като импортираме OrderedDict от колекции. Достъпно е от python2.7 нататък. OrderedDict се грижи да ви върне отделните елементи в реда, в който е наличен ключът.

Нека използваме списък и да използваме метода fromkeys(), наличен в OrderedDict, за да получим уникалните елементи от списъка.

За да използвате метода OrderedDict.fromkeys(), трябва да импортирате OrderedDict от колекции, както е показано по-долу:

from collections import OrderedDict

Ето пример за премахване на дубликати, използвайки метода OrderedDict.fromkeys().

Пример

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))

Изход:

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

От Python От версия 3.5 нагоре можем да използваме обикновения метод dict.fromkeys(), за да получим отделните елементи от списъка. Методът dict.fromkeys() връща уникални ключове и помага да се отървем от дублиращите се стойности.

Пример, който показва как работи dict.fromkeys() върху списък, за да се получат уникалните елементи, е следният:

Пример

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

Изход:

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

Метод 4) Използване на for-цикъл

Използването на for-цикъл, ще преминем през списъка с елементи, за да премахнем дубликати.

Първо инициализирайте масива с празен код, т.е. myFinallist = []. Вътре във for-loop добавете проверка дали елементите от списъка съществуват в масива myFinallist. Ако елементите не съществуват, добавете елемента към масива myFinallist, използвайки метода append().

Така че, когато се срещне дублиращ се елемент, той вече ще присъства в масива myFinallist и няма да бъде вмъкнат. Нека сега проверим същото в примера по-долу:

Пример

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))

Изход:

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

Метод 5) Използване на разбиране на списък

Списъчните разбирания са Python функции, които се използват за създаване на нови поредици (като списъци, речници и т.н.), използвайки поредици, които вече са били създадени. Това ви помага да намалите по-дългите цикли и да направите кода си по-лесен за четене и поддръжка.

Нека използваме разбирането на списъка, за да премахнем дубликати от дадения списък.

Пример

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)

Изход:

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

Метод 6) Използване на метода NumPy unique()

Методът unique() от модула NumPy може да ни помогне да премахнем дубликати от дадения списък.

За да работите с NumPy, първо импортирайте модула numpy:

Стъпка 1) Импортиране на NumPy модул

import numpy as np

Стъпка 2) Използвайте вашия списък с дубликати в метода unique(). Изходът се конвертира обратно в списък, използвайки метода tolist().

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

Стъпка 3) Накрая отпечатайте списъка:

print(myFinalList)

Крайният код с изход е както следва:

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

Изход:

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

Метод 7) Използване на методите на Pandas

Модулът Pandas има метод unique(), който ще ни даде уникалните елементи от дадения списък.

За да работите с модула Pandas:

Стъпка 1) Импортиране на модул Pandas

import pandas as pd

Стъпка 2) Използвайте списъка си с дубликати в метода unique():

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

Стъпка 3) Разпечатайте списъка:

print(myFinalList)

Крайният код с изход е както следва:

import pandas as pd

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

Изход:

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

Метод 8) Използване на enumerate() и разбиране на списък

Тук използваме комбинацията от list comprehension и enumerate(), за да премахнем дублиращите се елементи. Enumerate връща обект с брояч за всеки елемент в списъка. Например (0,1), (1,2) и т.н. Тук първата стойност е индексът, а втората стойност е елементът от списъка.

Всеки елемент се проверява дали съществува в списъка и ако съществува, се премахва от него.

Пример

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))

Изход:

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

Въпроси и Отговори

Не. Множеството е неподредена колекция, така че set() може да върне елементи в различен ред. За да премахнете дубликати, като същевременно запазите реда, използвайте dict.fromkeys() или цикъл, който добавя само елементи, които все още не са видени.

За големи списъци, set() е най-бърза, когато редът няма значение, защото проверките за членство са O(1). Когато редът има значение, list(dict.fromkeys(my_list)) е почти толкова бърза и запазва реда на първо виждане в един ред.

set() и dict.fromkeys() се нуждаят от хешируеми елементи, така че те не работят със списъци или речници. Преминете през списъка и добавете елементи, които не са видени, или конвертирайте всеки елемент в кортеж или JSON низ като временен ключ.

Използвайте списък(dict.fromkeys(my_list)). Тъй като Python Речниците от версия 3.7 запазват реда на вмъкване, така че ключовете остават в реда на първо появяване. В по-ранни версии използвайте collections.OrderedDict.fromkeys() за същия резултат.

Не. Методи като set(), dict.fromkeys(), comprehensions и NumPy или Pandas unique() изграждат нов списък и оставят източника непроменен. Преназначете резултата на същата променлива, ако искате да го презапишете.

Използвайте numpy.unique() или pandas.unique(), когато данните вече се намират в масиви или серия, или по време на анализ на данни. Обърнете внимание, че numpy.unique() също сортира стойностите, докато pandas.unique() запазва реда на първо виждане. Извикайте tolist() за обикновен списък.

Конвейерите за машинно обучение премахват дублиращи се редове преди обучение, така че повтарящите се извадки да не повлияят на модела или да доведат до изтичане между наборите за обучение и тестове. Pandas drop_duplicates() е често срещаният инструмент за почистване на таблични набори от данни.

Да. GitHub Copilot и агентните AI асистенти генерират set(), dict.fromkeys() или Pandas код за дедупликация от коментар, предлагат опцията за запазване на реда и рефакторират цикли, въпреки че все пак трябва да проверявате гранични случаи, като например нехешируеми елементи.

Обобщете тази публикация с: