Как удалить повторяющиеся элементы в списке python
Перейти к содержимому

Как удалить повторяющиеся элементы в списке 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()
# чтобы удалить дубликаты из списка

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

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

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

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

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

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

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

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

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

Она выглядит вот так:

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

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

Удалить повторяющиеся значения из списка Python

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

1. Использование набора

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

2. Использование понимания списка

Если вам нужно сохранить порядок вставки элементов в список, вы можете использовать понимание списка с помощью index() функция. Следующий код демонстрирует это.

Чтобы повысить производительность, избавьтесь от index() и использовать set вместо этого структура данных:

3. Использование сокращения

В качестве альтернативы вы можете использовать уменьшить операцию в списке, чтобы удалить из него дубликаты. Вот как будет выглядеть код:

4. Использование словаря

До версии Python 3.7 вы можете использовать OrderedDict , который может запоминать порядок вставки. Идея состоит в том, чтобы использовать fromkeys() функция класса, которая возвращает новый словарь со значениями по умолчанию None . Чтобы получить отдельные ключи, просто преобразуйте их в список, как показано ниже:

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

Есть много способов удалить дубликаты из списка Python:

  • использование временного списка и цикла;
  • использование встроенного метода set();
  • использование ключей словаря;
  • функция List count();
  • понимание списка.

Список в Python может содержать повторяющиеся элементы. Давайте рассмотрим примеры удаления повторяющихся элементов разными способами.

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

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

Результат: обновленный список после удаления дубликатов = [1, 2, 3, 4].

2. Функция set()

В наборе Python нет повторяющихся элементов. Мы можем использовать встроенную функцию set() для преобразования списка в набор, а затем использовать функцию list(), чтобы преобразовать его обратно в список.

3. Перечисление элементов как ключей словаря

Мы знаем, что ключи словаря уникальны. Класс dict имеет функцию fromkeys(), которая принимает итерацию для создания словаря с ключами из итерируемого.

4. Когда функция List count() – не рекомендуется

Метод list count() возвращает количество вхождений значения. Мы можем использовать его с методом remove(), чтобы убрать повторяющиеся элементы из списка.

ПРИМЕЧАНИЕ. Как указано в комментарии ниже, использование функции count() не рекомендуется при удалении элемента из того же итератора, поскольку это может привести к нежелательным результатам.

5. Понимание списка

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

Лучший способ удалить дубликаты из списка

Если вам не нужны повторяющиеся элементы, вам следует использовать Set. Но если вам нужно удалить повторяющиеся значения из списка, я бы предпочел функцию count(), потому что она не создает другой временный набор или объект списка. Таким образом, он более эффективен с точки зрения памяти.

5 методов удаления повторяющихся элементов из списков Python

В этом руководстве вы узнаете, как удалить повторяющиеся элементы из списков Python.

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

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

Основы списков Python

Давайте начнем наше обсуждение с рассмотрения основ списков Python.

Списки Python изменчивый. Таким образом, вы можете изменять их на месте, добавляя и удаляя элементы из списка. Кроме того, списки Python представляют собой наборы элементов, не обязательно уникальных.

Так как же сохранить только уникальные элементы и удалить дубликаты или повторяющиеся элементы?

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

Мы подробно изучим их в этом уроке.

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

Возьмем реальный пример. Предположим, вы на дне рождения своего друга.����

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

Давайте создадим список сладостей, содержащий все элементы на изображении выше.

В приведенном выше списке сладостей пункты «конфета» и «кекс» повторяются дважды. Давайте воспользуемся этим примером списка, чтобы удалить повторяющиеся элементы.

Итерация по спискам Python для удаления дубликатов

Самый простой способ — создать новый список, содержащий каждый элемент ровно один раз.

Прочитайте ячейку кода ниже:

  • Мы инициализируем пустой список unique_sweets.
  • Просматривая список сладостей, мы получаем доступ к каждой сладости.
  • Если сладкого еще нет в списке unique_sweets, мы добавляем его в конец списка unique_sweets с помощью метода .append().

Предположим, вы столкнулись с повторяющимся элементом, например, со вторым вхождением слова «конфеты» в списке сладостей. Это не добавляется в список unique_sweets, так как оно уже присутствует: sweet не в unique_sweets оценивается как False для второго вхождения «кекса» и «конфеты».

Поэтому в этом методе каждый элемент встречается в списке unique_sweets ровно один раз — без повторения.

Используйте понимание списка для удаления дубликатов

Вы также можете использовать понимание списка для заполнения списка unique_sweets.

Хотите освежить основы понимания списков?

▶️ Ознакомьтесь с учебным пособием по распознаванию списков в Python.

Давайте используем выражение понимания списка: [output for item in iterable if condition is True] чтобы кратко переписать приведенный выше цикл.

Даже если вы создаете новый список, вы не заполняете созданный список значениями. Это связано с тем, что результатом является операция .append() в списке unique_sweets.

Чтобы удалить повторяющиеся элементы из списков Python, вы также можете использовать встроенные методы списка, и мы рассмотрим это в следующем разделе.

Используйте встроенные методы списка для удаления дубликатов

Вы можете использовать методы списка Python .count() и .remove() для удаления повторяющихся элементов.

– С синтаксисом list.count(value) метод .count() возвращает количество раз, когда значение встречается в списке. Таким образом, количество повторяющихся элементов будет больше 1.

– list.remove(value) удаляет первое вхождение значения из списка.

Используя вышеизложенное, у нас есть следующий код.

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

  • Если конкретный элемент дублируется (встречается ровно дважды), этот метод удаляет первое вхождение.
  • Если конкретный элемент повторяется K раз, то после запуска вышеуказанного кода все равно останется K-1 повторений.

Но в целом, когда мы говорим о дубликатах, мы обычно имеем в виду все повторения.

Чтобы справиться с этим случаем, вы можете изменить приведенный выше цикл, чтобы удалить все повторения, кроме одного. Вместо того, чтобы использовать условие if для проверки количества определенного элемента, вы можете запустить цикл while для многократного удаления дубликатов, пока количество каждого элемента в списке не станет равным 1.

Список сладостей теперь содержит 2 повторения слова «кекс» и 3 повторения слова «конфеты».

Вы можете использовать цикл while для удаления повторений, как показано ниже. Цикл while продолжает работать до тех пор, пока количество сладкого в сладостях больше 1. Когда остается только одно вхождение, условие sweets.count(sweet) > 1 становится ложным, и цикл переходит к следующему элементу.

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

На данный момент мы узнали следующее:

  • Методы удаления повторяющихся элементов из списков Python путем создания новых списков, содержащих только уникальные элементы.
  • Встроенные методы списка .count() и .remove() для изменения списка на месте.

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

Приведение списка Python к набору для удаления дубликатов

Наборы Python — это наборы уникальных элементов. Следовательно, количество элементов, присутствующих в наборе (задается len( ), равно количеству присутствующих уникальных элементов.

Вы можете преобразовать любую итерацию Python в набор, используя синтаксис: set(iterable).

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

Из вывода в приведенной выше ячейке кода мы видим, что каждый элемент появляется ровно один раз, а дубликаты удалены.

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

Теперь, когда мы удалили дубликаты, приведя список к набору, мы можем снова преобразовать его в список, как показано ниже.

Используйте элементы списка в качестве ключей словаря для удаления дубликатов

Словарь Python — это набор пар ключ-значение, где ключи однозначно идентифицируют значения.

Вы можете создать словарь Python, используя метод .fromkeys() с синтаксисом: dict.fromkeys(ключи, значения). Здесь ключи и значения — это итерации, содержащие ключи и значения словаря соответственно.

  • keys — обязательный параметр, и им может быть любая итерация Python, соответствующая ключам словаря.
  • values ​​— необязательный параметр. Если вы не укажете значения iterable, используется значение по умолчанию None.

Без указания значений dict.fromkeys(sweets) возвращает словарь Python, в котором для значений установлено значение None — значение по умолчанию. Ячейка кода ниже объясняет это.

Как и в предыдущем разделе, мы снова можем преобразовать словарь в список, как показано ниже.

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

Подведение итогов��‍��

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

  • Используйте метод списка Python .append(), чтобы добавить неповторяющиеся элементы в новый список. Новый список содержит каждый элемент исходного списка ровно один раз и удаляет все повторения. Вы также можете сделать это, используя понимание списка.
  • Используйте встроенные методы .count() и .remove() для удаления элементов, которые встречаются ровно дважды. То же самое можно поместить в цикл while, чтобы удалить все дополнительные вхождения.
  • Приведите список Python к набору, чтобы сохранить только уникальные элементы.
  • Используйте dict.fromkeys(list) для удаления дубликатов из списка, поскольку в словаре не должно быть повторяющихся ключей.

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

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *