列表切片的大O.

时间:2012-11-02 21:59:30

标签: python list big-o

说我有一些Python列表,my_list包含N个元素。可以使用my_list[i_1]对单个元素建立索引,其中i_1是所需元素的索引。但是,Python列表也可以编入索引my_list[i_1:i_2],其中需要从i_1i_2的列表“切片”。切割大小为N的列表的Big-O(最坏情况)符号是什么?

就个人而言,如果我编写“切片器”,我会从i_1迭代到i_2,生成一个新列表并返回它,暗示O(N),这就是Python的用法吗?

谢谢,

3 个答案:

答案 0 :(得分:19)

获得切片是O(i_2 - i_1)。这是因为Python的列表内部表示是一个数组,因此您可以从i_1开始并迭代到i_2

有关详细信息,请参阅Python time complexity wiki entry

如果您愿意,还可以查看CPython source中的实施。

答案 1 :(得分:11)

根据http://wiki.python.org/moin/TimeComplexity

是O(k),其中k是切片大小

答案 2 :(得分:4)

对于大小为N的列表和大小为M的切片,迭代实际上只是O(M),而不是O(N)。由于M通常<&lt;&lt; N,这会产生很大的不同。

事实上,如果你考虑一下你的解释,就会明白为什么。你只是从i_1迭代到i_2,而不是从0到i_1,然后是I_1到i_2。