在python中,为什么我在执行list(set(listB)-set(listA))时收到" unhashable type:'list'"的错误消息?



我有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,我得到了错误消息不可处理类型:"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]]

相关内容

最新更新