如何获取两个列表的公共元素,这些列表本身就是python中的列表

时间:2016-02-23 22:55:49

标签: python python-2.7

我有两个列表列表:

l1 = [[3,1],[1,2],[1,'a'],[1,4]]
l2 = [[3,1],[1,4],[1,5],[1,'a']]

我希望得到他们的交集,即[[3,1],[1,4],[1,'a']]。我怎么能这样做?

3 个答案:

答案 0 :(得分:2)

l1 = [[3,1],[1,2],[1,'a'],[1,4]]
l2 = [[3,1],[1,4],[1,5],[1,'a']]
intersection = []
for x in l1:
    if x in l2:
        intersection.append(x)
print (intersection)

使用for循环查找相同的元素并将它们附加到另一个列表中。

输出;

[[3, 1], [1, 'a'], [1, 4]]
>>> 

或更短的方式,请使用列表推导;

l1 = [[3,1],[1,2],[1,'a'],[1,4]]
l2 = [[3,1],[1,4],[1,5],[1,'a']]

print ([x for x in l1 if x in l2])

答案 1 :(得分:1)

假设内部元素将始终处于相同的顺序。

out = set(map(tuple, l1)).intersection(map(tuple, l2))

输出

set([(1, 'a'), (3, 1), (1, 4)])

请注意,上面的内容返回一组元组,而不是列表。但如果需要,您可以轻松地将它们转换回列表:

map(list, out)

答案 2 :(得分:1)

考虑到您对该问题的澄清评论,请执行以下操作:

将其中一个列表转换为一个集合(对于O(1)查找时间),然后使用列表推导。

>>> l2_s = set(map(tuple, l2))
>>> [x for x in l1 if tuple(x) in l2_s]
[[3, 1], [1, 'a'], [1, 4]]