考虑两个列表A和B.我知道list(set(A) - set(B))
将给出A和B之间的差异.A和B中的元素都是列表的情况如何。即A和B是列表清单?例如,
A = [[1,2], [3,4], [5,6]]
B = [[3,4], [7,8]]
我希望将差异A - B
作为列表列表,即[[1,2],[5,6]]
list(set(A) - set(B))
TypeError: unhashable type: 'list'
答案 0 :(得分:1)
这是你可以使用的单行:
diff = [x for x in A if x not in B]
或者如果你想使用过滤器:
diff = list(filter(lambda x: x not in B, A))
答案 1 :(得分:1)
>>> [i for i in A if i not in B]
[[1, 2], [5, 6]]
答案 2 :(得分:1)
我们的想法是将列表列表转换为元组列表,
它们是可以清洗的,因此也是制作套装的候选人:
In [192]: C = set(map(tuple, A)) - set(map(tuple, B))
In [193]: C
Out[193]: {(1, 2), (5, 6)}
又一次触摸:
In [196]: [*map(list, C)]
Out[196]: [[1, 2], [5, 6]]
<强> ADDED 强>
在python 2.7中,最后的触摸更简单:
map(list, C)
答案 3 :(得分:1)
A = [[1, 2], [3, 4], [5, 6]]
B = [[3, 4], [7, 8]]
print[x for x in A if x not in B]