List 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]

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

# Код 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()
# чтобы удалить дубликаты из списка

# вывод списка после удаления элементов
print («Список после удаления дубликатов: » + str(li))

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

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

Создано 21.09.2021 10:33:00

  • Михаил Русаков
  • Копирование материалов разрешается только с указанием автора (Михаил Русаков) и индексируемой прямой ссылкой на сайт (http://myrusakov.ru)!

    Добавляйтесь ко мне в друзья ВКонтакте: http://vk.com/myrusakov.
    Если Вы хотите дать оценку мне и моей работе, то напишите её в моей группе: http://vk.com/rusakovmy.

    Если Вы не хотите пропустить новые материалы на сайте,
    то Вы можете подписаться на обновления: Подписаться на обновления

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

    Порекомендуйте эту статью друзьям:

    Если Вам понравился сайт, то разместите ссылку на него (у себя на сайте, на форуме, в контакте):

    1. Кнопка:
      Она выглядит вот так:
    2. Текстовая ссылка:
      Она выглядит вот так: Как создать свой сайт
    3. BB-код ссылки для форумов (например, можете поставить её в подписи):

    Комментарии ( 0 ):

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

    Copyright © 2010-2023 Русаков Михаил Юрьевич. Все права защищены.

    Источник

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

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

    Статьи

    Введение

    В данной статье рассмотрим 5 способов удаления дубликатов из списка в Python.

    Удаление дубликатов из списка с помощью генератора

    Для начала создадим список:

    test_list = [4, 9, 9, 8, 6, 4, 4, 5, 5, 2, 3, 8, 4, 10] print(f"Начальный вид списка : ")

    Далее мы создадим пустой список, в котором не будет дубликатов:

    test_list = [4, 9, 9, 8, 6, 4, 4, 5, 5, 2, 3, 8, 4, 10] print(f"Начальный вид списка: ") new_list = [] [new_list.append(x) for x in test_list if x not in new_list] print(f"Список без дубликатов: ") # Вывод: # Начальный вид списка : [4, 9, 9, 8, 6, 4, 4, 5, 5, 2, 3, 8, 4, 10] # Список после удаления дубликатов : [4, 9, 8, 6, 5, 2, 3, 10]

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

    Дословное условие: Если элемента итерации нет в new_list, то он добавляется в new_list.

    Удаление дубликатов из списка с помощью генератора списка, и метода enumerate()

    Вместо условия в генераторе можно использовать метод enumerate(), который найдёт существующие элементы, и пропустит их при добавлении в новый список:

    test_list = [4, 9, 9, 8, 6, 4, 4, 5, 5, 2, 3, 8, 4, 10] print(f"Начальный вид списка: ") new_list = [i for n, i in enumerate(test_list) if i not in test_list[:n]] print(f"Список без дубликатов: ") # Вывод: # Начальный вид списка : [4, 9, 9, 8, 6, 4, 4, 5, 5, 2, 3, 8, 4, 10] # Список после удаления дубликатов : [4, 9, 8, 6, 5, 2, 3, 10]

    Удаление дубликатов из списка с помощью цикла for

    Генератор это по сути цикл внутри списка, но мы можем вместо генератора пойти по более длинному пути, и использовать цикл вне списка:

    test_list = [4, 9, 9, 8, 6, 4, 4, 5, 5, 2, 3, 8, 4, 10] print(f"Начальный вид списка: ") new_list = [] for i in test_list: if i not in new_list: new_list.append(i) print(f"Список без дубликатов: ") # Вывод: # Начальный вид списка : [4, 9, 9, 8, 6, 4, 4, 5, 5, 2, 3, 8, 4, 10] # Список после удаления дубликатов : [4, 9, 8, 6, 5, 2, 3, 10]

    Удаление дубликатов из списка с помощью функции set()

    Способ заключается в том, что с помощью метода set() мы преобразуем список в множество, получим уникальные значения, и сделаем из множества список.

    test_list = [4, 9, 9, 8, 6, 4, 4, 5, 5, 2, 3, 8, 4, 10] print(f"Начальный вид списка: ") test_list = list(set(test_list)) print(f"Список без дубликатов: ") # Вывод: # Начальный вид списка : [4, 9, 9, 8, 6, 4, 4, 5, 5, 2, 3, 8, 4, 10] # Список после удаления дубликатов : [2, 3, 4, 5, 6, 8, 9, 10]

    Удаление дубликатов из списка с помощью метода fromkeys

    В модуле collections есть класс OrderedDict, в котором есть метод fromkeys. Именно этот метод нам и понадобится! Для начала он удалит дубликаты, после чего вернёт словарь, который впоследствии мы преобразуем в список:

    from collections import OrderedDict test_list = [4, 9, 9, 8, 6, 4, 4, 5, 5, 2, 3, 8, 4, 10] print(f"Начальный вид списка: ") new_list = list(OrderedDict.fromkeys(test_list)) print(f"Список без дубликатов: ") # Вывод: # Начальный вид списка : [4, 9, 9, 8, 6, 4, 4, 5, 5, 2, 3, 8, 4, 10] # Список после удаления дубликатов : [4, 9, 8, 6, 5, 2, 3, 10]

    Заключение

    В статье мы с Вами разобрали целых пять способов удаления дубликатов в списке в Python! Надеюсь Вам понравилась статья, желаю удачи и успехов! 🙂

    Источник

    Читайте также:  Removing items from list python
    Оцените статью