Способы удаления дубликатов из списка в Python

Способы удаления дубликатов из списка в Python

Способы удаления дубликатов из списка в Python

Удаление дубликатов списка достаточно простая задача. При этом, знание ее вариантов имеет большое практическое значение. И в сегодняшней статье мы рассмотрим варианты получения уникального списка элементов из исходной последовательности.
И рассмотрим варианты реализации.

Наивный метод.

В наивном методе мы просто проходим по списку и добавляем первое вхождение элемента в новый список, игнорируя все остальные вхождения этого конкретного элемента.



# Код демонстрирует удаление дубликатов 

# из списка наивным методом



# инициализация списка

my_list = [1, 3, 5, 6, 3, 5, 6, 1]

print ("Оригинальный список : " + str(my_list))



# используем наивный метод

# чтобы убрать дубликаты 

# из списка

li = []

for i in my_list:

  if i not in li:

    li.append(i)



# список после удаления дубликатов

print ("список после удаления дубликатов : " + str(li))





# вывод



Оригинальный список : [1, 3, 5, 6, 3, 5, 6, 1]

список после удаления дубликатов : [1, 3, 5, 6]





Использование генератора списков.

Данный метод аналогичен предыдущему, но использует запись в виде одной строки, с использованием генератора списков.



# Код демонстрирует удаление дубликатов 

# из списка с помощью генератора списков



# инициализация списка

my_list = [1, 3, 5, 6, 3, 5, 6, 1]

print ("Оригинальный список : " + str(my_list))



# используем генератор списка 

# чтобы удалить дубликаты



li = []

[li.append(x) for x in my_list if x not in li]



# вывод списка после удаления элементов

print ("Список после удаления дубликатов : " + str(li))



# вывод



Оригинальный список : [1, 3, 5, 6, 3, 5, 6, 1]

список после удаления дубликатов : [1, 3, 5, 6]



Использование set().

Это самый популярный способ, с помощью которого дубликаты удаляются из списка. Но главным и заметным недостатком этого подхода является то, что в этом конкретном методе порядок элементов теряется.



# Код Python3 показывает как 

# удалять дубликаты из списка методом set()



# инициализация списка

my_list = [1, 5, 3, 6, 3, 5, 6, 1]

print ("Оригинальный список : " + str(my_list))



# используем set()

# чтобы удалить дубликаты из списка 

my_list = list(set(my_list))



# вывод списка после удаления элементов

# не сохраняет порядок

print ("Список после удаления дубликатов: " + str(my_list))





# вывод



Оригинальный список : [1, 5, 3, 6, 3, 5, 6, 1]

Список после удаления дубликатов: [1, 3, 5, 6]



Генератор списка + enumarate().

Генератор списка в сочетании с функцией перечисления также может решить эту задачу. Он ищет уже существующие элементы и пропускает их добавление. Также сохраняет порядок списка.



# Код Python3 показывает как удалять дубликаты из списка 

# используя генератор списков(list comprehension) + enumerate()



# инициализация списка

my_list = [1, 5, 3, 6, 3, 5, 6, 1]

print ("Оригинальный список : " + str(my_list))



# используем list comprehension + enumerate()

# чтобы удалить дубликаты из списка



li = [i for n, i in enumerate(my_list) if i not in my_list[:n]]



# вывод списка после удаления элементов

print ("Список после удаления дубликатов: " + str(li))



# вывод



Оригинальный список : [1, 5, 3, 6, 3, 5, 6, 1]

Список после удаления дубликатов: [1, 5, 3, 6]



Модуль collections.OrderedDict.fromkeys().

Это самый быстрый метод для достижения конкретной задачи. Сначала он удаляет дубликаты и возвращает словарь, который необходимо преобразовать в список. Он также хорошо работает и в случае строк.



# Код Python3 показывает как удалять дубликаты из списка 

# с помощью collections.OrderedDict.fromkeys()





from collections import OrderedDict



# инициализация списка

my_list = [1, 5, 3, 6, 3, 5, 6, 1]

print ("Оригинальный список : " + str(my_list))



# используем модуль collections.OrderedDict.fromkeys()

# чтобы удалить дубликаты из списка



li = list(OrderedDict.fromkeys(my_list))



# вывод списка после удаления элементов

print ("Список после удаления дубликатов: " + str(li))





# вывод



Оригинальный список : [1, 5, 3, 6, 3, 5, 6, 1]

Список после удаления дубликатов: [1, 5, 3, 6]





Таким образом, для получения списка из уникальных элементов в Python, применимы все вышеуказанные методы. Но при этом встроенный модуль collections минимизирует скорость выполнения задачи.

Источник

НЕТ КОММЕНТАРИЕВ

Оставить комментарий