我有两个列表列表:
l1 = [[3,1],[1,2],[1,'a'],[1,4]]
l2 = [[3,1],[1,4],[1,5],[1,'a']]
我希望得到他们的交集,即[[3,1],[1,4],[1,'a']]
。我怎么能这样做?
答案 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]]