列表上的哈希函数

use*_*226 3 python hash

我有一个包含 3 个字段的列表:

[weight, age, marks]
Run Code Online (Sandbox Code Playgroud)

我想在每一行上应用哈希函数并将这些哈希值存储为列表。如何继续?

我使用以下函数组合了体重、年龄、标记的各个列表zip()

list1=zip(weight,age,marks)
Run Code Online (Sandbox Code Playgroud)

请帮我解决这个问题,我是Python新手。提前致谢。

Jan*_*sky 5

您可以尝试在元组结构上创建哈希,例如(1, 444, "fine"),但不能在列表上创建哈希[1, 444, "fine"],因为它是可变的。

In [56]: weight = 120.0

In [57]: age = 99

In [58]: marks = ("a", "b", "cc")

In [59]: row = [weight, age, marks]
Run Code Online (Sandbox Code Playgroud)

尝试hash像列表这样的可变结构将会失败:

In [60]: hash(row)
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-60-4a104abdcd18> in <module>()
----> 1 hash(row)

TypeError: unhashable type: 'list'
Run Code Online (Sandbox Code Playgroud)

元组是不可变的,这将会成功:

In [61]: hash(tuple(row))
Out[61]: 1271481222345795008
Run Code Online (Sandbox Code Playgroud)

请注意,在我的示例中,我创建marks为元组,如果您将其作为列表,则它也必须转换为元组:

In [62]: marks = ["a", "b", "cc"]

In [63]: hash((weight, age, marks))
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-63-7c8ffc07e716> in <module>()
----> 1 hash((weight, age, marks))

TypeError: unhashable type: 'list'

In [64]: hash((weight, age, tuple(marks)))
Out[64]: 1271481222345795008
Run Code Online (Sandbox Code Playgroud)