Python对包含列表

时间:2016-08-29 08:22:19

标签: python

考虑两个列表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'

4 个答案:

答案 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]