Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 查找两个大列表之间的重叠_Python_List - Fatal编程技术网

Python 查找两个大列表之间的重叠

Python 查找两个大列表之间的重叠,python,list,Python,List,我有两个非常大的列表p和Q,我想在p中找到同样在Q中的项目。我阅读了其他建议使用集合的线程,但我不确定这是否必要。我认为以下几行可以满足需要: overlap = [l for l in P if l in Q] 但是,我想知道这是否是一种合理且最快的找到重叠的方法,或者您建议使用集合 谢谢。正如@AChampion建议的那样,集合在这方面更有效。下面是那些感兴趣的人的代码。您只需要将较大的列表(例如Q)转换为一个列表,然后 larger_list_set = set(Q) overlap

我有两个非常大的列表p和Q,我想在p中找到同样在Q中的项目。我阅读了其他建议使用集合的线程,但我不确定这是否必要。我认为以下几行可以满足需要:

overlap = [l for l in P if l in Q]
但是,我想知道这是否是一种合理且最快的找到重叠的方法,或者您建议使用集合


谢谢。

正如@AChampion建议的那样,集合在这方面更有效。下面是那些感兴趣的人的代码。您只需要将较大的列表(例如Q)转换为一个列表,然后

 larger_list_set = set(Q)
 overlap = [l for l in P if l in larger_list_set]

它的效率更高

对于大型
N
而言,将
Q
转换为
集合将对性能产生显著影响。目前这是
O(N^2)
,即
P
中的每个项目都需要
O(N)
Q
中查找。对于您正在谈论的集合,
O(N)
P
中的每个项目都需要在
set(Q)
中进行O(1)查找。有一个
O(N)
集合(Q)
的构建时间,它随着
N
的增大而消失,所以仍然被描述为
O(N)
@AChampion:我假设你的意思是OP的算法是
O(N^2)
,而不是说将
Q
转化为一个集合会有那个顺序。是的,如果不清楚,我会道歉。有了更多信息,就有可能确定最佳/简单的解决方案,例如使用集合的多集合。计数器()。如果您使用集合,您也可以使用集合的方法。