嵌套列表有问题。我想用python语言计算两个嵌套列表的交集的长度。我的清单组成如下:
list1 = [[1,2], [2,3], [3,4]]
list2 = [[1,2], [6,7], [4,5]]
output_list = [[1,2]]
如何计算两个列表的交集?
我认为有两种合理的方法可以解决此问题。
如果顶层列表中没有太多项目,则只需检查其中一个子列表中的每个子列表是否存在于另一个列表中:
intersection = [inner_list for inner in list1 if inner_list in list2]
该in
运营商将测试相等,从而有望找到具有相同内容的不同列表对象。但是,由于列表成员资格测试必须遍历所有子列表,因此效率不是很高。换句话说,其性能为O(len(list1)*len(list2))
。但是,如果您的清单很长,可能要花费比您想要的更多的时间。
渐近有效的替代方法是将内部列表转换为tuple
s并将顶级list
s转换为set
s。你实际上并不需要编写任何环路自己的这一点,因为map
和set
类型的&
运营商将照顾它都为你:
intersection_set = set(map(tuple, list1)) & set(map(tuple, list2))
如果您需要的结果是一个list
的list
S,你当然可以,转换set
的tuple
退一步为list
的list
S:
intersection_list = list(map(list, intersection_set))
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句