如何在不使用集合的情况下在python中找到两个列表的交集

时间:2019-07-04 20:28:31

标签: python list

我有一个程序,其中有两个非常大的列表,一个有3 ^ 12个术语,另一个有5000个术语,我想找到它们的交集(两个列表中的项目都相同)。

我已经尝试过使用集合和循环(见下文)。

我已经尝试过(在Python 3中)

[i for i in joinedCombs if i in dictionary]

endResult = list(set(joinedCombs)&set(dictionary))

第一行代码出现时间错误,第二行代码出现内存错误。我该怎么做才能平衡速度和时间?请留下答案,不要发表评论

2 个答案:

答案 0 :(得分:1)

使用len确定哪个列表是较短的列表,然后从中创建一个列表:

[i for i in joinedCombs if i in dictionary]
if len(joinedCombs) < len(dictionary):
    s1 = set(dictionary)
    itr = joinedCombs
else:
    s1 = set(joinedCombs)
    itr = dictionary

new = [i for i in itr if i in s1]

答案 1 :(得分:0)

您可以尝试以下代码行:

endResult = list(set(joinedCombs).intersection(dictionary))