Условие
Удалите дубликаты из списка. Уточните: важен ли порядок исходных элементов? Если важен — первое вхождение должно остаться на своём месте.
Решение
Подход
Без сохранения порядка — приведение к set. С сохранением порядка — два варианта: либо использовать dict.fromkeys(lst) (с Python 3.7 порядок ключей в словаре стабильный), либо вручную пройти и отслеживать виденные элементы в set.
Реализация
# Без сохранения порядка
def dedup_unordered(lst: list) -> list:
return list(set(lst))
# С сохранением порядка — питоничный способ
def dedup_ordered(lst: list) -> list:
return list(dict.fromkeys(lst))
# С сохранением порядка — явный цикл
def dedup_ordered_manual(lst: list) -> list:
seen = set()
out = []
for x in lst:
if x not in seen:
seen.add(x)
out.append(x)
return outПодводные камни
set(lst)теряет порядок. На больших списках Python обычно выдаёт стабильный вид, но опираться на это нельзя.- Элементы должны быть хэшируемыми. Список словарей через
setне пройдёт — нужно делать ключ изtuple(sorted(d.items()))или сравнивать вручную. - Если в списке есть
nan—nan != nan, иsetоставит несколько NaN-ов. Обрабатывайте отдельно.
Эталонный ответ
list(set(lst)) без порядка; list(dict.fromkeys(lst)) с порядком; ручной цикл с seen = set(), если элементы нехэшируемые.