Ответ
В 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.