Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 列表切片的Big-O_Python_List_Big O - Fatal编程技术网

Python 列表切片的Big-O

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

假设我有一些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
)。这是因为Python对列表的内部表示是一个数组,因此可以从
i_1
开始,然后迭代到
i_2

有关更多信息,请参见Python


如果愿意,您还可以查看中的实现。

对于大小为N的列表和大小为M的切片,迭代实际上只是O(M),而不是O(N)。因为M通常是根据


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

我只需要我的_列表[1],但经常执行,所以看起来它的复杂度会比我的_列表加倍。我的列表大小固定,元素可能会更改值。保持对固定列表切片的引用有多昂贵?更新:我编写了一个自定义iterable类,它迭代我现有的列表,应该没有任何惩罚。