Статья

Как в Python удалить дубли из списка

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

Распространенный подход к получению коллекции уникальных элементов заключается в использовании множеств (set). set – это неупорядоченные коллекции различных объектов. Чтобы создать множество из любой итерируемой коллекции, вы можете просто передать ее встроенной функции set(). Если позже вам снова понадобится список, вы можете аналогичным образом передать множество функции list(). Приведем примеры:
>>> ls = ["Питон", "Пайтон", "Питон", "Пайтон", "Python", "Python"]
>>> list(set(ls))
["Python", "Питон", "Пайтон"]

>>> s = ["Питон", "Пайтон"]
>>> list(set(ls) - set(s))
# разность двух множеств:

["Python"]
Как видно из примера, первоначальный порядок элементов не сохраняется. Множества сами по себе являются неупорядоченными коллекциями, поэтому порядок теряется. При преобразовании множества обратно в список создается произвольный порядок элементов.

Если важен порядок, то вам придется использовать другой механизм. Очень распространенным решением является использование OrderedDict для сохранения порядка ключей во время вставки:
>>> from collections import OrderedDict
>>> ls = [1, 2, 3, 2, 3, 5, 6, 7]
>>> list(OrderedDict.fromkeys(ls))
[1, 2, 3, 5, 6, 7]
Начиная с Python 3.7, встроенный словарь гарантированно сохраняет порядок вставки, поэтому вы также можете использовать его напрямую, если используете Python 3.7 или более позднюю версию:
>>> list(dict.fromkeys(ls))
[1, 2, 3, 5, 6, 7]
python