我有一个包含 3 个字段的列表:
[weight, age, marks]
Run Code Online (Sandbox Code Playgroud)
我想在每一行上应用哈希函数并将这些哈希值存储为列表。如何继续?
我使用以下函数组合了体重、年龄、标记的各个列表zip()
:
list1=zip(weight,age,marks)
Run Code Online (Sandbox Code Playgroud)
请帮我解决这个问题,我是Python新手。提前致谢。
您可以尝试在元组结构上创建哈希,例如(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)