Python 查找两个大列表之间的重叠
我有两个非常大的列表p和Q,我想在p中找到同样在Q中的项目。我阅读了其他建议使用集合的线程,但我不确定这是否必要。我认为以下几行可以满足需要: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
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
转化为一个集合会有那个顺序。是的,如果不清楚,我会道歉。有了更多信息,就有可能确定最佳/简单的解决方案,例如使用集合的多集合。计数器()。如果您使用集合,您也可以使用集合的方法。