在 python 中,为什么在执行 list(set(listB)-set(listA)) 时会收到“unhashable type:'list'”的错误消息?
In python, why do I get an error message of " unhashable type:'list'" when doing list(set(listB)-set(listA))?
我有 listA=[[0,1,2]]
和 listB=[[0,1,2],[0,1,3],[0,2,3]]
,并且想要获取 listB 中但不在 listA 中的元素,即我想要的输出是 listC=[[0,1,3] ,[0,2,3]].
我已经使用列表理解得到了 listC:
listA=[[0,1,2]]
listB=[[0,1,2],[0,1,3],[0,2,3]]
listC=[b for b in listB if b not in listA]
但是如果我想用另一种方式来做,即在下面的代码中使用 setdifference,我会收到错误消息 unhashable type:'list'.
listA=[[0,1,2]]
listB=[[0,1,2],[0,1,3],[0,2,3]]
listC=list(set(listB)-set(listA))
为什么会弹出这个错误?以及如何解决?谢谢!
集合需要散列对象,列表不可散列(因为它们是可变的)。
因此您需要转换为元组并返回列表:
listA=[[0,1,2]]
listB=[[0,1,2],[0,1,3],[0,2,3]]
listC=list(map(list,set(map(tuple,listB))-set(map(tuple,listA))))
listC
输出:[[0, 1, 3], [0, 2, 3]]
我有 listA=[[0,1,2]]
和 listB=[[0,1,2],[0,1,3],[0,2,3]]
,并且想要获取 listB 中但不在 listA 中的元素,即我想要的输出是 listC=[[0,1,3] ,[0,2,3]].
我已经使用列表理解得到了 listC:
listA=[[0,1,2]]
listB=[[0,1,2],[0,1,3],[0,2,3]]
listC=[b for b in listB if b not in listA]
但是如果我想用另一种方式来做,即在下面的代码中使用 setdifference,我会收到错误消息 unhashable type:'list'.
listA=[[0,1,2]]
listB=[[0,1,2],[0,1,3],[0,2,3]]
listC=list(set(listB)-set(listA))
为什么会弹出这个错误?以及如何解决?谢谢!
集合需要散列对象,列表不可散列(因为它们是可变的)。
因此您需要转换为元组并返回列表:
listA=[[0,1,2]]
listB=[[0,1,2],[0,1,3],[0,2,3]]
listC=list(map(list,set(map(tuple,listB))-set(map(tuple,listA))))
listC
输出:[[0, 1, 3], [0, 2, 3]]