- Способы удаления дубликатов из списка в Python
- Комментарии ( 0 ):
- Удаление дубликатов из списка в Python
- Введение
- Удаление дубликатов из списка с помощью генератора
- Удаление дубликатов из списка с помощью генератора списка, и метода enumerate()
- Удаление дубликатов из списка с помощью цикла for
- Удаление дубликатов из списка с помощью функции set()
- Удаление дубликатов из списка с помощью метода fromkeys
- Заключение
Способы удаления дубликатов из списка в 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.
Если Вы не хотите пропустить новые материалы на сайте,
то Вы можете подписаться на обновления: Подписаться на обновления
Если у Вас остались какие-либо вопросы, либо у Вас есть желание высказаться по поводу этой статьи, то Вы можете оставить свой комментарий внизу страницы.
Порекомендуйте эту статью друзьям:
Если Вам понравился сайт, то разместите ссылку на него (у себя на сайте, на форуме, в контакте):
- Кнопка:
Она выглядит вот так: - Текстовая ссылка:
Она выглядит вот так: Как создать свой сайт - BB-код ссылки для форумов (например, можете поставить её в подписи):
Комментарии ( 0 ):
Для добавления комментариев надо войти в систему.
Если Вы ещё не зарегистрированы на сайте, то сначала зарегистрируйтесь.
Copyright © 2010-2023 Русаков Михаил Юрьевич. Все права защищены.
Удаление дубликатов из списка в 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! Надеюсь Вам понравилась статья, желаю удачи и успехов! 🙂