如果我们有
X1=[[a,b,c],[a,e,t],[a,b,c]]
和
X2=[[a,b,c]]
我想找到X1和X2之间的区别:
X3=X1-X2=[[a,b,c],[a,e,t]].
所以我的输出应该包含两个列表而不是一个,因为我只想删除一个[a,b,c]而不是两个。
我是这样做的,但我收到错误:
s = set(X2)
X3 = [x for x in X1 if x not in s]
我得到的错误是:
unhashable type: 'list'
当程序到达这一点时,我收到此错误:
s = set(X2)
答案 0 :(得分:4)
那么,X3 = [a,e,t]
,对吧?
无需将其转换为设置。你可以这样做:
result = [x for x in X1 if x not in X2]
。
答案 1 :(得分:1)
列表是不可用的,因此它们不能是set
的成员。您可以将内部列表转换为frozenset
,因此两个具有相同项但排序不同的子列表仍被视为相同,然后使用Counter
查找两者之间的差异列表:
from collections import Counter
X3 = Counter([frozenset(i) for i in X1]) - Counter([frozenset(i) for i in X2])
print(X3)
# Counter({frozenset({'c', 'a', 'b'}): 1, frozenset({'e', 'a', 't'}): 1})
print(X3.keys())
# [frozenset({'e', 't', 'a'}), frozenset({'c', 'b', 'a'})]
Counter
是dict
的子类,因此您可以使用.keys()
将差异作为列表返回:
print(X3.keys()) # or print(list(X3.keys())) in Python 3.x
# [frozenset({'e', 't', 'a'}), frozenset({'c', 'b', 'a'})]
如果您需要保留内部list
,则可以通过以下方式将frozenset
替换为列表:
X3 = [list(i) for i in X3.keys()]
print(X3)
# [['a', 't', 'e'], ['c', 'a', 'b']]
答案 2 :(得分:0)
如错误所述,列表是不可删除的(因为它们是可变的)。将列表列表转换为可以清除的元组列表:
send(reinterpret_cast<unsigned*>(&buffer))
在你的情况下,你可以这样做:
new