在 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]]