Чтобы избавиться от дублирующих значений в списке Python, первое, что приходит в голову, это воспользоваться свойством множества set
хранить только уникальные значения.
>>> lst = [9, 5, 3, 1, 7, 6, 5, 3, 1, 4, 3, 2, 1] >>> list(set(lst)) # [1, 2, 3, 4, 5, 6, 7, 9]
Из примера видно, что получены только уникальные значения исходного списка lst
. Большой недостаток такого способа удаления дубликатов заключается в том, что итоговый список теряет порядок очередности значений, что следует из определения множества (множество - это неупорядоченная последовательность различных хешированных объектов).
Так как же удалить дубликаты в списке и при этом сохранить порядок элементов списка? В этом могут помочь следующие два свойства словаря Python dict
:
Для создания словаря Python из последовательности (списка list
) воспользуемся генератором словаря:
>>> lst = [9, 5, 3, 1, 7, 6, 5, 3, 1, 4, 3, 2, 1] >>> d = {key:0 for key in lst} >>> d # {9: 0, 5: 0, 3: 0, 1: 0, 7: 0, 6: 0, 4: 0, 2: 0} # теперь просто получим ключи словаря >>> list(d) # [9, 5, 3, 1, 7, 6, 4, 2]
Из примера видно что полученный список (без дубликатов) сохранил очерёдность значений, как и ожидалось.
Еще проще использовать метод dict.fromkeys()
, который создаёт словарь из последовательности ключей.
>>> lst = [9, 5, 3, 1, 7, 6, 5, 3, 1, 4, 3, 2, 1] >>> d = dict.fromkeys(lst) >>> d # {9: None, 5: None, 3: None, 1: None, 7: None, 6: None, 4: None, 2: None} # теперь просто получим ключи словаря >>> list(d) # [9, 5, 3, 1, 7, 6, 4, 2]