Python中两个嵌套列表的交集

时间:2015-04-05 21:35:20

标签: list python-2.7 intersection

我对嵌套列表有疑问。我想用python语言计算两个嵌套列表交集的长度。我的清单组成如下:

list1 = [[1,2], [2,3], [3,4]]
list2 = [[1,2], [6,7], [4,5]]
output_list = [[1,2]]

如何计算两个列表的交集?

3 个答案:

答案 0 :(得分:1)

我认为解决这个问题有两种合理的方法。

如果您的顶级列表中没有很多项目,您只需检查其中一个中的每个子列表是否存在于另一个中:

intersection = [inner_list for inner in list1 if inner_list in list2]

in运算符将测试是否相等,因此可以按预期找到具有相同内容的不同列表对象。然而,这不是非常有效,因为列表成员资格测试必须迭代所有子列表。换句话说,它的表现是O(len(list1)*len(list2))。但是,如果您的列表很长,则可能需要更多时间。

更渐近有效的替代方法是将内部列表转换为tuple并将顶级list转换为set s。实际上,您并不需要为此自行编写任何循环,因为mapset类型的&运算符会为您完成所有操作:< / p>

intersection_set = set(map(tuple, list1)) & set(map(tuple, list2))

如果您的结果需要list list,那么您当然可以将set的{​​{1}}转换回tuple } list s:

list

答案 1 :(得分:0)

如何在python中使用set?

>>> set1={(1,2),(2,3),(3,4)}
>>> set2={(1,2),(6,7),(4,5)}
>>> set1 & set2
set([(1, 2)])
>>> len(set1 & set2)
1

答案 2 :(得分:0)

import json



list1 = [[1,2], [2,3], [3,4]]
list2 = [[1,2], [6,7], [4,5]]

list1_str = map(json.dumps, list1)
list2_str = map(json.dumps, list2)

output_set_str = set(list1_str) & set(list2_str)

output_list = map(json.loads, output_set_str)

print output_list