Python 为什么用扩展切片反转字符串的速度如此之快?
我只是,当然,扩展的切片速度非常快。事实上,使用Python 3.6.7,我觉得它的时间是恒定的: 为什么会这样?我假设它至少需要在所有元素上迭代,因此具有线性时间?有没有涉及到cPython的一些指针魔法?我的评估有缺陷吗 代码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
#/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