说我有一些Python列表,my_list
包含N个元素。可以使用my_list[i_1]
对单个元素建立索引,其中i_1
是所需元素的索引。但是,Python列表也可以编入索引my_list[i_1:i_2]
,其中需要从i_1
到i_2
的列表“切片”。切割大小为N的列表的Big-O(最坏情况)符号是什么?
就个人而言,如果我编写“切片器”,我会从i_1
迭代到i_2
,生成一个新列表并返回它,暗示O(N),这就是Python的用法吗?
谢谢,
答案 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。