不知道为什么这个在使用set和zip时有效:
>>> a = ([1])
>>> b = ([2])
>>> set(zip(a,b))
{(1, 2)}
但这个没有?。
>>> a = ([1],[2])
>>> b = ([3],[4])
>>> set(zip(a,b))
Traceback (most recent call last):
File "<pyshell#21>", line 1, in <module>
set(zip(a,b))
TypeError: unhashable type: 'list'
期望结果 (1,3) (2,4)
正确的方法是什么?
谢谢!
John
如果我们看一下zip
输出,那就更有意义了:
>>> a = ([1]) # equivalent to [1], not a tuple
>>> b = ([2]) # equivalent to [2], not a tuple
>>> list(zip(a,b))
[(1, 2)]
>>> a = ([1],[2])
>>> b = ([3],[4])
>>> list(zip(a,b))
[([1], [3]), ([2], [4])]
在第一种情况下,列表包含整数元组;在第二种情况下,它包含列表元组,并且列表不可哈希处理。
在第一种情况下,如果你想要一个包含列表的单例元组,你应该使用 a = ([1],)
和 b = ([2],)
。如果您以这种方式定义a
和b
,那么set(zip(a, b))
将像在第二种情况下一样失败。
您可以执行这样的操作,然后获得所需的输出。
a = ([1],[2])
b = ([3],[4])
zip(zip(*a),zip(*b))[0]
像这样((1, 2), (3, 4))。
zip(*a)
转换 a 和 b 元组变量中的所有列表,如 [(1,2)] 和 [(3,4)]。
你应该写这个:
a = [1, 2]
b = [3, 4]