我刚刚找到了这些performance notes for cPython lists:
python列表所需的时间......
现在我想知道cPython集的相同性能特征。另外,我想在列表/集上迭代的速度有多快。我对大型名单/集合特别感兴趣。
答案 0 :(得分:1)
AFAIK,Python“规范”并未强制实施列表,词典或集合的特定数据结构,因此无法“正式”回答。如果你只关心CPython(参考实现),那么我们可以抛出一些非官方的复杂性。您可能希望重新制定问题以定位特定的Python实现。
无论如何,你提到的复杂性是不对的。假设动态调整大小的数组实现,追加项目是分摊O(1)
:大多数情况下,您只需复制新值,在最坏的情况下,您需要重新分配,复制所有n
项,加上新的。接下来,插入具有完全相同的最坏情况,因此它具有相同的复杂性上限,但在最好的情况下,它只移动k
项,其中k
是项目数过去您要插入的位置。