Python 列表切片的Big-O
假设我有一些Python列表,Python 列表切片的Big-O,python,list,big-o,Python,List,Big O,假设我有一些Python列表,my_list,其中包含N个元素。可以使用my_list[i_1]对单个元素进行索引,其中i_1是所需元素的索引。但是,Python列表也可以被索引为my_list[i_1:i_2],其中需要从i_1到i_2的列表“切片”。对大小为N的列表进行切片的大O(最坏情况)表示法是什么 就个人而言,如果我正在编写“切片器”,我会从I_1迭代到I_2,生成一个新列表并返回它,这意味着O(N),Python就是这样做的吗 谢谢,得到一个切片就是O(i_2-i_1)。这是因为Py
my_list
,其中包含N个元素。可以使用my_list[i_1]
对单个元素进行索引,其中i_1
是所需元素的索引。但是,Python列表也可以被索引为my_list[i_1:i_2]
,其中需要从i_1
到i_2
的列表“切片”。对大小为N的列表进行切片的大O(最坏情况)表示法是什么
就个人而言,如果我正在编写“切片器”,我会从I_1
迭代到I_2
,生成一个新列表并返回它,这意味着O(N),Python就是这样做的吗
谢谢,得到一个切片就是O(i_2-i_1
)。这是因为Python对列表的内部表示是一个数组,因此可以从i_1
开始,然后迭代到i_2
有关更多信息,请参见Python
如果愿意,您还可以查看中的实现。对于大小为N的列表和大小为M的切片,迭代实际上只是O(M),而不是O(N)。因为M通常是根据
它是O(k),其中k是切片大小我只需要我的_列表[1],但经常执行,所以看起来它的复杂度会比我的_列表加倍。我的列表大小固定,元素可能会更改值。保持对固定列表切片的引用有多昂贵?更新:我编写了一个自定义iterable类,它迭代我现有的列表,应该没有任何惩罚。