List Python中两个嵌套列表的交集

List Python中两个嵌套列表的交集,list,python-2.7,intersection,List,Python 2.7,Intersection,我对嵌套列表有问题。我想用python语言计算两个嵌套列表相交的长度。我的名单如下: list1 = [[1,2], [2,3], [3,4]] list2 = [[1,2], [6,7], [4,5]] output_list = [[1,2]] 如何计算两个列表的交集?在python中使用集合如何 >>> set1={(1,2),(2,3),(3,4)} >>> set2={(1,2),(6,7),(4,5)} >>> set1 &am

我对嵌套列表有问题。我想用python语言计算两个嵌套列表相交的长度。我的名单如下:

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

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

在python中使用集合如何

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

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

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

intersection = [inner_list for inner in list1 if inner_list in list2]
操作符中的
将测试相等性,因此可以按预期找到具有相同内容的不同列表对象。但是,这不是很有效,因为列表成员资格测试必须迭代所有子列表。换句话说,它的性能是
O(len(list1)*len(list2))
。但是,如果您的列表很长,则可能需要比您希望的更多的时间

一种更为渐近有效的替代方法是将内部列表转换为
tuple
s,并将顶层
list
s转换为
set
s。实际上,您不需要自己为此编写任何循环,因为
map
set
类型的
&
操作符将为您处理所有这些:

intersection_set = set(map(tuple, list1)) & set(map(tuple, list2))
如果需要将结果转换为
列表的
列表
s,当然可以将
元组的
集合
转换回
列表的
列表
s:

intersection_list = list(map(list, intersection_set))

可能重复我已经尝试过的解决方案,但它不适合我!一个子列表中的所有元素必须与另一个子列表中的所有元素匹配才能作为交点?这里的输出是什么?@jacopoterinoni:该页面上的列表列表有解决方案,例如
[val for val in list1 if val in list2]
。(请参阅。)我无法使用此方法,因为set()函数不适用于嵌套列表,而仅适用于简单列表。我还尝试在列表上使用set()函数,但无法使用它!
intersection_list = list(map(list, intersection_set))