почему set не работает с списком
почему set не работает для list
set([[0], [0]])
выкидывает ошибку:
TypeError: unhashable type: 'list'
перевел на русский:
TypeError: нехешируемый тип: 'список'
понятнее не стало. что означает и как исправить?
Ответы (2 шт):
потому что по каждому элементу множество set вычисляет некоторое число (условно) и ставит в соответствие этому числу элемент множества
простой пример - текст и md5 от текста или crc32 от текста (почитайте про хэш-суммы)
в результате очень быстро можно осуществлять поиск и т.д., то с чем и работает множество как список уникальных элементов
а теперь скажите как именно подсчитать хэш от списка?
поскольку множество этого не умеет, то и соответственно не допускает размещения таких элементов
Если ваши списки не очень длинные, то "исправить" можно, превратив внутренние списки в кортежи - кортежи уже хэшируемы, поскольку они неизменяемые объекты, в отличие от списков:
list_of_lists = [[0], [0], [0, 1, 2], [0, 1], [1, 2], [0, 1, 2]]
print(set(map(tuple, list_of_lists)))
Вывод:
{(0,), (0, 1), (0, 1, 2), (1, 2)}
А также покажу обратное преобразование кортежей в списки, если они вам потом всё-таки понадобятся:
set_of_tuples = set(map(tuple, list_of_lists))
print(list(map(list, set_of_tuples)))
На выходе:
[[0, 1, 2], [0], [0, 1], [1, 2]]