Как удалить дубликаты из списка в Python

⚡ Умное резюме

Удаление дубликатов из Python Для работы со списками можно использовать несколько встроенных подходов, включая set(), dict.fromkeys(), циклы, списковые выражения и библиотечные методы из NumPy и Pandas, каждый из которых обеспечивает баланс между сохранением порядка и скоростью.

  • 🔘 Установить метод: Метод set() мгновенно возвращает уникальные элементы, но не сохраняет исходный порядок элементов в списке.
  • ☑️ Порядок сохранен: Методы dict.fromkeys() и OrderedDict удаляют дубликаты, сохраняя при этом ключи.ping порядок вставки при первом обнаружении.
  • Ручное управление: Цикл for или генератор списков с проверкой принадлежности элементов обеспечивает порядок и читаемость кода.
  • 🧪 Методы работы с библиотекой: Функции NumPy unique() и Pandas unique() удаляют дубликаты данных и возвращают список результатов через метод tolist().
  • 🇧🇷 Ограничение хешируемости: Для ключей множеств и словарей требуются хешируемые элементы, поэтому для списков или словарей необходим подход, основанный на циклах.
  • 🤖 Рабочие процессы ИИ: В конвейерах машинного обучения для предотвращения смещения и утечки данных используется функция drop_duplicates() из библиотеки Pandas, которая удаляет дубликаты обучающих данных.

Удаление дубликатов из списка в 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 из библиотеки collections. Он доступен начиная с Python 2.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

. для цикла, мы пройдемся по списку элементов, чтобы удалить дубликаты.

Сначала инициализируйте массив пустым значением, то есть 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]

Часто задаваемые вопросы (FAQ)

Нет. Множество — это неупорядоченная коллекция, поэтому метод 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(), генераторы списков и функция unique() из NumPy или Pandas, создают новый список, оставляя исходный список неизменным. Если вы хотите перезаписать результат, присвойте его той же переменной.

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

В конвейерах машинного обучения повторяющиеся строки удаляются перед обучением, чтобы повторяющиеся выборки не искажали модель и не создавали помех между обучающим и тестовым наборами данных. Функция drop_duplicates() из библиотеки Pandas — распространенный инструмент для очистки табличных наборов данных.

Да. GitHub Copilot и агентные ИИ-помощники генерируют код set(), dict.fromkeys() или код дедупликации Pandas из комментария, предлагают вариант с сохранением порядка и рефакторизуют циклы, хотя вам все равно следует проверять граничные случаи, такие как нехешируемые элементы.

Подведем итог этой публикации следующим образом: