使用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)
这样做的正确方法是什么?
谢谢!
约翰
答案 0 :(得分: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])]
在第一种情况下,列表包含一个int元组;在第二种情况下,它包含列表元组和列表不可清除。
在第一种情况下,如果您想要包含列表的单例元组,则应使用a = ([1],)
和b = ([2],)
。如果您以这种方式定义a
和b
,那么set(zip(a, b))
将会像第二种情况一样失败。
答案 1 :(得分:1)
您可以执行此操作,然后获得所需的输出。
a = ([1],[2])
b = ([3],[4])
zip(zip(*a),zip(*b))[0]
像这样((1,2),(3,4))。
zip(*a)
转换a和b元组变量中的所有列表,如[(1,2)]和[(3,4)]。
答案 2 :(得分:0)
你应该写下这个:
a = [1, 2]
b = [3, 4]