- Удаление дубликатов из списка в Python
- 1. Использование временного списка
- 2. Функция set()
- 3. Перечисление элементов как ключей словаря
- 4. Когда функция List count() – не рекомендуется
- 5. Понимание списка
- Лучший способ удалить дубликаты из списка
- Способы удаления дубликатов из списка в Python
- Комментарии ( 0 ):
- Удаление дубликатов из списка в Python
- Введение
- Удаление дубликатов из списка с помощью генератора
- Удаление дубликатов из списка с помощью генератора списка, и метода enumerate()
- Удаление дубликатов из списка с помощью цикла for
- Удаление дубликатов из списка с помощью функции set()
- Удаление дубликатов из списка с помощью метода fromkeys
- Заключение
Удаление дубликатов из списка в Python
Есть много способов удалить дубликаты из списка Python:
- использование временного списка и цикла;
- использование встроенного метода set();
- использование ключей словаря;
- функция List count();
- понимание списка.
Список в Python может содержать повторяющиеся элементы. Давайте рассмотрим примеры удаления повторяющихся элементов разными способами.
1. Использование временного списка
Это метод для удаления повторяющихся элементов из списка. Мы создадим временный список и добавим в него элементы только в том случае, если его нет.
ints_list = [1, 2, 3, 4, 3, 2] temp = [] for x in ints_list: if x not in temp: temp.append(x) ints_list = temp print(f'Updated List after removing duplicates = ')
Результат: обновленный список после удаления дубликатов = [1, 2, 3, 4].
2. Функция set()
В наборе Python нет повторяющихся элементов. Мы можем использовать встроенную функцию set() для преобразования списка в набор, а затем использовать функцию list(), чтобы преобразовать его обратно в список.
ints_list = [1, 2, 3, 4, 3, 2] ints_list1 = list(set(ints_list)) print(ints_list1) # [1, 2, 3, 4]
3. Перечисление элементов как ключей словаря
Мы знаем, что ключи словаря уникальны. Класс dict имеет функцию fromkeys(), которая принимает итерацию для создания словаря с ключами из итерируемого.
ints_list = [1, 2, 3, 4, 3, 2] ints_list2 = list(dict.fromkeys(ints_list)) print(ints_list2) # [1, 2, 3, 4]
4. Когда функция List count() – не рекомендуется
Метод list count() возвращает количество вхождений значения. Мы можем использовать его с методом remove(), чтобы убрать повторяющиеся элементы из списка.
ints_list = [1, 2, 3, 4, 3, 2] for x in ints_list: if ints_list.count(x) > 1: ints_list.remove(x) print(ints_list) # [1, 2, 3, 4]
ПРИМЕЧАНИЕ. Как указано в комментарии ниже, использование функции count() не рекомендуется при удалении элемента из того же итератора, поскольку это может привести к нежелательным результатам.
values = [87, 94, 45, 94, 94, 41, 65, 94, 41, 99, 94, 94, 94] for x in values: if values.count(x) > 1: values.remove(x) print(values) # [87, 45, 65, 41, 99, 94, 94] - 94 is still present twice
5. Понимание списка
Мы можем создать список из итерации, используя понимание списка. Этот метод аналогичен использованию временного списка и цикла for для удаления повторяющихся элементов. Но это уменьшает количество строк кода.
int_list = [1, 2, 3, 4, 3, 2] temp = [] [temp.append(x) for x in ints_list if x not in temp] print(temp) # [1, 2, 3, 4]
Лучший способ удалить дубликаты из списка
Если вам не нужны повторяющиеся элементы, вам следует использовать Set. Но если вам нужно удалить повторяющиеся значения из списка, я бы предпочел функцию count(), потому что она не создает другой временный набор или объект списка. Таким образом, он более эффективен с точки зрения памяти.
Способы удаления дубликатов из списка в 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! Надеюсь Вам понравилась статья, желаю удачи и успехов! 🙂