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

«Как удалить дубликаты из списка в Python?» — вопрос из категории Python, который задают на 26% собеседований Data Scientist / ML Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

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

1. Использование set() (самый быстрый, порядок не сохраняется)

original_list = [1, 2, 2, 3, 4, 4, 5]
unique_list = list(set(original_list))
# Результат: [1, 2, 3, 4, 5] (порядок может измениться)

2. Использование dict.fromkeys() (сохраняет порядок, Python 3.6+)

original_list = ['a', 'b', 'a', 'c', 'b']
unique_list = list(dict.fromkeys(original_list))
# Результат: ['a', 'b', 'c'] (порядок сохранён)

3. Через цикл с проверкой (универсальный, сохраняет порядок)

original_list = [10, 20, 10, 30, 20]
unique_list = []
for item in original_list:
    if item not in unique_list:
        unique_list.append(item)
# Результат: [10, 20, 30]

4. Для списков словарей или сложных объектов

import json

list_of_dicts = [
    {'id': 1, 'name': 'Alice'},
    {'id': 2, 'name': 'Bob'},
    {'id': 1, 'name': 'Alice'}  # Дубликат
]

# Используем JSON-сериализацию для создания ключа
unique_dicts = {}
for d in list_of_dicts:
    key = json.dumps(d, sort_keys=True)
    if key not in unique_dicts:
        unique_dicts[key] = d

result = list(unique_dicts.values())

Производительность: Для больших списков с хешируемыми элементами set() или dict.fromkeys() значительно быстрее цикла с оператором in.