如何在 python 3.5 中以最少的时间复杂度找到 2 个列表的交集,不包括内置的 set 函数?

How to find intersection of 2 lists in least time complexity in python 3.5 excluding the built in set function?

我知道我们可以用这种方法解决,但我很想知道是否还有其他时间复杂度最低的方法。

a=[1,2,3,4]
b=[2,3,5]
c=set(a).intersection(b)

这给出了答案,但是有更短的方法吗?如果有人在 python 3.5

中解释这个内置函数的时间复杂度,那也会很有帮助

较短的解决方案:

如果你想要一个更短的方法,你可以使用&运算符来sets,这正是一个路口:

>>> a = [1, 2, 3, 4]
>>> b = [2, 3, 5]
>>> c = set(a) & set(b)
{2, 3}

时间复杂度:

Python 有一个名为 timeit 的模块,它测量小代码片段的执行时间。所以在你的情况下:

使用intersection()函数:

$ python3 -m timeit -s "a = [1, 2, 3, 4]; b = [2, 3, 5]; c = set(a).intersection(set(b))"

100000000 loops, best of 3: 0.00989 usec per loop

使用 & 运算符:

$ python3 -m timeit -s "a = [1, 2, 3, 4]; b = [2, 3, 5]; c = set(a) & set(b)"

100000000 loops, best of 3: 0.01 usec per loop

你看他们之间的差别很小(因为在里面他们是一样的东西)。但是没有比set intersection更有效的方法了,因为内置方法已经足够优化了。

Here是Python中每个收集方法的时间复杂度table。看set部分:

  • 操作:路口s&t
  • 平均情况:O(min(len(s), len(t))
  • 最坏情况:O(len(s) * len(t))
  • 注意:如果 t 不是集合,请将 "min" 替换为 "max"