Як видалити дублікати зі списку в 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 додайте перевірку, чи існують елементи зі списку в масиві 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() і розуміння списку

Тут ми використовуємо комбінацію спискового розгляду та 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 як тимчасовий ключ.

Використовуйте list(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 та агентні ШІ-асистенти генерують код дедуплікації set(), dict.fromkeys() або Pandas з коментаря, пропонують опцію збереження порядку та рефакторують цикли, хоча вам все одно слід перевіряти граничні випадки, такі як елементи, що не хешуються.

Підсумуйте цей пост за допомогою: