Хеширование массивов в Python - PullRequest
39 голосов
/ 11 августа 2011

Возможно ли хеширование lists?

Например, я знаю, что возможны хэши кортежей:

>>> hash((1,2,3,4,5,6))
-319527650

Но возможно ли хешировать list?

>>> hash([1,2,3,4,5,6])
hash_value

Возможное решение:

Здесь очень подробное объяснение хеширования списков.

Ответы [ 3 ]

47 голосов
/ 11 августа 2011

Просто попробуйте:

>>> hash((1,2,3))
2528502973977326415
>>> hash([1,2,3])
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: unhashable type: 'list'
>>> hash(frozenset((1,2,3)))
-7699079583225461316
>>> hash(set((1,2,3)))
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: unhashable type: 'set'

Таким образом, вы можете получить hash из tuple и frozenset, поскольку они неизменны, и вы не можете сделать это для list и set потому что они изменчивы.

11 голосов
/ 29 ноября 2012

Если вам действительно нужно использовать список в качестве словарного ключа, попробуйте сначала преобразовать его в строку.
my_list = str(my_list)

8 голосов
/ 11 августа 2011

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...