在列表中使用 [::-1] 的运行时间

runtime of using [::-1] on a list

正在准备面试,这是我找不到的。 https://blog.finxter.com/python-list-reverse/#:~:text=The%20time%20complexity%20of%20the,the%20number%20of%20list%20elements。说 .reverse() 是 O(n) 我认为是因为它替换了每个索引。是 [::-1] 只是向后打印列表还是类似的事情发生

list.reverse操作到位。这意味着它几乎肯定会在幕后做这样的事情:

for i in range(len(self) // 2):
     j = len(self) - 1 - i
     self[i], self[j] = self[j], self[i]

实际方法是用C实现的,当然会比较冗长,尤其是交换操作

list[::-1] 创建原件的副本。这个想法是相似的,但是由于未到位的逆转,你可以奢侈地只写入目标索引而不是通过临时对象进行交换:

new = [None] * len(self)
for i in range(len(self)):
    j = len(self) - 1 - i
    new[j] = self[i]

实际的切片处理代码要复杂得多,因为它必须能够接受整数和各种设置自定义开始和停止边界以及步长的非正统切片表达式。