在 python 中将集合转换为列表的算法复杂性

mac*_*etw 4 python time-complexity python-3.x python-collections

在 python 中,当我将集合转换为列表时,此类任务的算法复杂度是多少?它只是对集合进行类型转换,还是需要将项目复制到不同的数据结构中?发生了什么?

我很想知道复杂性是恒定的,就像 Python 中的许多东西一样。

nor*_*ok2 6

您可以通过一个简单的基准轻松地看到这一点:

import matplotlib.pyplot as plt


x = list(range(10, 20000, 20))
y = []
for n in x:
    s = set(range(n))
    res = %timeit -r2 -n2 -q -o list(s)
    y.append(res.best)


plt.plot(x, y)
Run Code Online (Sandbox Code Playgroud)

阴谋

这清楚地显示了线性关系——以一些噪声为模。

(已编辑,因为第一个版本正在对不同的东西进行基准测试)。

  • 我认为跳跃是因为列表实现为增长分配了额外的空间,但在达到限制时必须重新分配列表。 (2认同)