5 методов удаления повторяющихся элементов из списков Python
Опубликовано: 2022-07-05В этом руководстве вы узнаете, как удалить повторяющиеся элементы из списков Python.
Когда вы работаете со списками в Python, вам иногда может понадобиться работать только с уникальными элементами в списке — путем удаления дубликатов.
Есть несколько разных способов сделать это. В этом уроке мы рассмотрим пять таких техник.
Основы списков Python
Давайте начнем наше обсуждение с рассмотрения основ списков Python.
Списки Python изменяемы. Таким образом, вы можете изменять их на месте, добавляя и удаляя элементы из списка. Кроме того, списки Python представляют собой наборы элементов, не обязательно уникальных.
Так как же сохранить только уникальные элементы и удалить дубликаты или повторяющиеся элементы?
Ну, вы можете сделать это несколькими разными способами. Вы можете либо создать новый список, содержащий только уникальные элементы исходного списка. Или вы можете изменить исходный список на месте и удалить повторяющиеся элементы.
Мы подробно изучим их в этом уроке.
Методы удаления дубликатов из списков Python
Возьмем реальный пример. Предположим, вы на дне рождения своего друга.
В представленной коллекции сладостей вы видите, что некоторые элементы повторяются. Теперь вы хотите удалить эти повторяющиеся элементы из списка сладостей.

Давайте создадим список sweets
, содержащий все элементы на изображении выше.
sweets = ["cupcake","candy","lollipop","cake","lollipop","cheesecake","candy","cupcake"]
В приведенном выше списке sweets
пункты «конфета» и «кекс» повторяются дважды. Давайте воспользуемся этим примером списка, чтобы удалить повторяющиеся элементы.
Итерация по спискам Python для удаления дубликатов
Самый простой способ — создать новый список, содержащий каждый элемент ровно один раз.
Прочитайте ячейку кода ниже:
unique_sweets = [] for sweet in sweets: if sweet not in unique_sweets: unique_sweets.append(sweet) print(unique_sweets) # Output ['cupcake', 'candy', 'lollipop', 'cake', 'cheesecake']
- Мы инициализируем пустой список
unique_sweets
. - Просматривая
sweets list
, мы получаем доступ к каждойsweet
. - Если
sweet
еще нет в спискеunique_sweets
, мы добавляем его в конец спискаunique_sweets
с помощью.append()
.
Предположим, вы столкнулись с повторяющимся элементом, например, со вторым вхождением слова «конфеты» в списке sweets
. Это не добавляется в список unique_sweets
, так как оно уже присутствует: sweet not in unique_sweets
оценивается как False
для второго вхождения «кекса» и «конфеты».
Поэтому в этом методе каждый элемент встречается в списке unique_sweets
ровно один раз — без повторения.
Используйте понимание списка для удаления дубликатов
Вы также можете использовать понимание списка для заполнения списка unique_sweets
.
Хотите освежить основы понимания списков?
️ Ознакомьтесь с учебным пособием по распознаванию списков в Python.
Давайте воспользуемся выражением понимания списка: [вывод для элемента в итерируемом, если условие истинно] , чтобы вкратце переписать приведенный выше цикл.
unique_sweets = [] [unique_sweets.append(sweet) for sweet in sweets if sweet not in unique_sweets] print(unique_sweets) # Output ['cupcake', 'candy', 'lollipop', 'cake', 'cheesecake']
Даже если вы создаете новый список, вы не заполняете созданный список значениями. Это связано с тем, что результатом является .append()
в списке unique_sweets
.
Чтобы удалить повторяющиеся элементы из списков Python, вы также можете использовать встроенные методы списка, и мы рассмотрим это в следующем разделе.
Используйте встроенные методы списка для удаления дубликатов
Вы можете использовать методы списка Python .count()
и .remove()
для удаления повторяющихся элементов.
– С синтаксисом list.count(value) метод
.count()
возвращает количество раз, когдаvalue
встречается вlist
. Таким образом, количество повторяющихся элементов будет больше 1.– list.remove(value) удаляет первое вхождение значения из списка.
Используя вышеизложенное, у нас есть следующий код.
for sweet in sweets: # check if the count of sweet is > 1 (repeating item) if sweets.count(sweet) > 1: # if True, remove the first occurrence of sweet sweets.remove(sweet) print(sweets) # Output ['cake', 'lollipop', 'cheesecake', 'candy', 'cupcake']
Поскольку метод .remove()
удаляет только первое вхождение значения, вы не можете использовать его для удаления элементов, встречающихся более двух раз.
- Если конкретный элемент дублируется (встречается ровно дважды), этот метод удаляет первое вхождение.
- Если конкретный элемент повторяется
K
раз, то после запуска вышеуказанного кода все равно останетсяK-1
повторений.
Но в целом, когда мы говорим о дубликатах, мы обычно имеем в виду все повторения.
Чтобы справиться с этим случаем, вы можете изменить приведенный выше цикл, чтобы удалить все повторения, кроме одного. Вместо того, чтобы использовать условие if
для проверки количества определенного элемента, вы можете запустить цикл while
для многократного удаления дубликатов, пока количество каждого элемента в списке не станет равным 1.

Список sweets
теперь содержит 2 повторения слова «кекс» и 3 повторения слова «конфеты».
sweets = ["cupcake","candy","lollipop","cake","lollipop","candy","cheesecake","candy","cupcake"]
Вы можете использовать цикл while
для удаления повторений, как показано ниже. Цикл while продолжает работать до тех пор, пока количество сладкого в сладостях больше 1. Когда остается только одно вхождение, условие sweets.count(sweet) > 1 становится ложным, и цикл переходит к следующему элементу.
for sweet in sweets: # check if the count of sweet is > 1 (repeating item) while(sweets.count(sweet) > 1): # repeatedly remove the first occurrence of sweet until one occurrence remains. sweets.remove(sweet) print(sweets) # Output ['cake', 'lollipop', 'cheesecake', 'candy', 'cupcake']
Но использование вложенных циклов может быть не очень эффективным, поэтому вы можете рассмотреть возможность использования одного из других обсуждаемых методов, если вы работаете с большими списками.
На данный момент мы узнали следующее:
- Методы удаления повторяющихся элементов из списков Python путем создания новых списков, содержащих только уникальные элементы.
- Встроенные методы списка
.count()
и.remove()
для изменения списка на месте.
Некоторые встроенные структуры данных Python требуют, чтобы все значения были уникальными и не повторялись. Поэтому мы можем привести список Python к одной из этих структур данных, чтобы удалить дубликаты. А затем преобразовать их обратно в список. Мы узнаем, как это сделать, в следующих разделах.
Приведение списка Python к набору для удаления дубликатов
Наборы Python — это наборы уникальных элементов. Следовательно, количество элементов, присутствующих в наборе (задается len(<set-obj>
), равно количеству присутствующих уникальных элементов.
Вы можете преобразовать любой итерируемый Python в набор, используя синтаксис:
set(iterable)
.
Теперь давайте превратим список сладостей в набор и посмотрим на результат.
set(sweets) # Output {'cake', 'candy', 'cheesecake', 'cupcake', 'lollipop'}
Из вывода в приведенной выше ячейке кода мы видим, что каждый элемент появляется ровно один раз, а дубликаты удалены.
Также обратите внимание, что порядок элементов не обязательно совпадает с их порядком в исходном списке сладостей. Это связано с тем, что объект множества Python является не только набором уникальных элементов, но и неупорядоченной коллекцией .
Теперь, когда мы удалили дубликаты, приведя список к набору, мы можем снова преобразовать его в список, как показано ниже.
unique_sweets = list(set(sweets)) print(unique_sweets) # Output ['cake', 'cheesecake', 'candy', 'cupcake', 'lollipop']
Используйте элементы списка в качестве ключей словаря для удаления дубликатов
Словарь Python — это набор пар ключ-значение, где ключи однозначно идентифицируют значения.
Вы можете создать словарь Python, используя метод .fromkeys()
с синтаксисом: dict.fromkeys(keys, values)
. Здесь keys
и values
— это итерации, содержащие ключи и значения словаря соответственно.
-
keys
— обязательный параметр, и им может быть любая итерация Python, соответствующая ключам словаря. -
values
— необязательный параметр. Если вы не укажете значения iterable, используется значение по умолчаниюNone
.
Без указания значений dict.fromkeys(sweets)
возвращает словарь Python, в котором для значений установлено значение None
— значение по умолчанию. Ячейка кода ниже объясняет это.
dict.fromkeys(sweets) # Output {'cake': None, 'candy': None, 'cheesecake': None, 'cupcake': None, 'lollipop': None}
Как и в предыдущем разделе, мы снова можем преобразовать словарь в список, как показано ниже.
unique_sweets = list(dict.fromkeys(sweets)) print(unique_sweets) # Output ['cupcake', 'candy', 'lollipop', 'cake', 'cheesecake']
Из приведенного выше вывода видно, что повторяющиеся элементы были удалены из списка sweets
.
Подводя итоги
Вот обзор различных методов, которые вы можете использовать для удаления повторяющихся элементов или повторов из списков Python.
- Используйте метод списка Python .append() , чтобы добавить неповторяющиеся элементы в новый список. Новый список содержит каждый элемент исходного списка ровно один раз и удаляет все повторения. Вы также можете сделать это, используя понимание списка.
- Используйте встроенные методы .count() и .remove() для удаления элементов, которые встречаются ровно дважды. То же самое можно поместить в цикл while , чтобы удалить все дополнительные вхождения.
- Приведите список Python к набору, чтобы сохранить только уникальные элементы.
- Используйте dict.fromkeys(list) для удаления дубликатов из списка, поскольку в словаре не должно быть повторяющихся ключей.
Затем ознакомьтесь с проектами Python, чтобы практиковаться и учиться. Или узнайте, как найти индекс элемента в списках Python. Приятного обучения!