使用Python设置和压缩问题

Joh*_*hnX 5 python python-3.x

使用set和zip时不确定为什么这个有效:

>>> a = ([1])
>>> b = ([2])
>>> set(zip(a,b))
{(1, 2)}
Run Code Online (Sandbox Code Playgroud)

但这个没有?

>>> 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'
Run Code Online (Sandbox Code Playgroud)

期望的结果(1,3)(2,4)

这样做的正确方法是什么?

谢谢!

约翰

nne*_*neo 9

如果我们看一下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])]
Run Code Online (Sandbox Code Playgroud)

在第一种情况下,列表包含一个int元组; 在第二种情况下,它包含列表的列表和列表不可清除.

在第一种情况下,如果你想要一个包含列表的单例元组,你应该使用a = ([1],)b = ([2],).如果定义ab这样的话set(zip(a, b))会像它在第二种情况下不会失败.