【问题标题】:Time Complexity of "in" (containment operator)“in”的时间复杂度(包含操作员)
【发布时间】:2026-02-01 02:00:02
【问题描述】:

我只是想知道何时理解如下算法的时间复杂度。

对于一个 python 列表,如果我们有一个 for 循环遍历它,然后进行包含检查,那么它的时间复杂度会是 O(n^2)。

我知道两者都是 O(n)(或者我认为),所以将它们相互嵌套会使其成为 O(n^2)?

我认为如果这个“列表”实际上是一个列表,那么下面代码的时间复杂度是O(n^2)。但如果它是一本字典,它将是 O(n),因为查找是 O(1)。对吗?

提前感谢您的帮助!

for element in list:
    if x in list:

【问题讨论】:

  • 您的示例中的一些 cmets:首先(我怀疑与实际代码最不相关),不要使用 list 作为变量名,因为您会隐藏内置类型。接下来(也许更相关),您不需要测试您正在迭代的列表和您正在检查成员资格的列表是否相同。 in 测试总是正确的,所以不需要它。如果它们是单独的列表(或字典),那么 O(n^2) 可能不正确,因为它假定 both 列表的大小为 n。如果它们可以有不同的大小,您应该将运行时间描述为O(m*n)

标签: python list dictionary time-complexity


【解决方案1】:

你的分析是正确的。

  • 列表包含是 O(n),执行 O(n) 操作 O(n) 次是 O(n2)。
  • 字典查找是 O(1),执行 O(1) 操作 O(n) 次是 O(n)。

【讨论】:

  • @Mateus 请解释这不能回答问题的原因。