Python 为什么用扩展切片反转字符串的速度如此之快?

Python 为什么用扩展切片反转字符串的速度如此之快?,python,slice,Python,Slice,我只是,当然,扩展的切片速度非常快。事实上,使用Python 3.6.7,我觉得它的时间是恒定的: 为什么会这样?我假设它至少需要在所有元素上迭代,因此具有线性时间?有没有涉及到cPython的一些指针魔法?我的评估有缺陷吗 代码 #/usr/bin/env python 将numpy作为np导入 随机输入 导入时间信息 随机种子(0) def main(): string_20=''.join(random.choices(“ABCDEFGHIJKLM”,k=20)) string_2000

我只是,当然,扩展的切片速度非常快。事实上,使用Python 3.6.7,我觉得它的时间是恒定的:

为什么会这样?我假设它至少需要在所有元素上迭代,因此具有线性时间?有没有涉及到cPython的一些指针魔法?我的评估有缺陷吗

代码
#/usr/bin/env python
将numpy作为np导入
随机输入
导入时间信息
随机种子(0)
def main():
string_20=''.join(random.choices(“ABCDEFGHIJKLM”,k=20))
string_2000=''.join(random.choices(“ABCDEFGHIJKLM”,k=2000))
string_200000=''.join(random.choices(“ABCDEFGHIJKLM”,k=200000))
string_200000000=''.join(随机的.choices(“ABCDEFGHIJKLM”,k=200000000))
函数=[(列表字符,'20个字符',字符串字符20),
(列表“2000字符”,字符串“2000”),
(列出“200000字符”,字符串为200000),
(列出“200000000字符”,字符串“200000000”),
]
持续时间_列表={}
对于函数中的func、name、params:
持续时间=timeit.repeat(lambda:func(参数),repeat=100,number=3)
持续时间\列表[名称]=列表(np.数组(持续时间)*1000)

print('{func:刚刚选中它。列表理解方法必须是

def list_comprehension(string):
    return string[::-1]
我遗漏了最大的列表,因为它花费了很长时间。这是我的输出:

/usr/bin/python3 ./boxplot.py 
20 chars            : min:   1.7μs, mean:   2.0μs, max:    7.5μs
2000 chars          : min:   6.7μs, mean:   6.8μs, max:   13.4μs
200000 chars        : min: 567.6μs, mean: 609.9μs, max:  997.2μs
似乎不是预期的恒定值:-)


顺便说一句,很好的方框图!

你错过了列表中的“-”了吗?
1234[::1]
返回
“1234”
是的,我忘了
-
def list_comprehension(string):
    return string[::-1]
/usr/bin/python3 ./boxplot.py 
20 chars            : min:   1.7μs, mean:   2.0μs, max:    7.5μs
2000 chars          : min:   6.7μs, mean:   6.8μs, max:   13.4μs
200000 chars        : min: 567.6μs, mean: 609.9μs, max:  997.2μs