使用 Python 设置和压缩问题



不知道为什么这个在使用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],) 。如果您以这种方式定义ab,那么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]

最新更新