sri*_* pv 5 python string performance python-3.x
s="google"
print("".join(reversed(s))) //elgoog
print(s[::-1]) //elgoog
Run Code Online (Sandbox Code Playgroud)
在上面的字符串是反向使用python 3反向方法和切片方法都显示相同的输出,但从这一个是最有效的python编程语言,为什么??
当你谈论效率时你应该从哪个角度具体说明?内存、运行时、实现等
考虑到运行时,反向索引肯定更快,因为当您使用joinplusreversed时,您正在调用两个函数,与简单索引相比,这两个函数都有自己的缺陷(挂起和恢复函数的框架等)。但是,如果您出于任何目的想要一个接一个地循环字符,并且内存是一个问题(主要是当字符串很大时),您可以使用它,reversed因为它返回一个迭代器对象。
In [2]: s = "example"
In [4]: r = reversed(s)
In [5]: next(r) # e.g. You can access to the characters using `next()`
Out[5]: 'e'
Run Code Online (Sandbox Code Playgroud)
所以结论是,你应该根据你的需要选择方法,实际上这就是为什么 Python 中的一项特定任务有多种方法。
内存效率没有显着差异。由于字符串是不可变的,因此两种方法都必须复制整个数据。
\n\n要检查性能,您可以使用timeit标准库中的模块。由于避免了 Python 代码中的迭代,切片速度明显加快:
>>> s = "google"\n>>> %timeit "".join(reversed(s))\n612 ns \xc2\xb1 20.8 ns per loop (mean \xc2\xb1 std. dev. of 7 runs, 1000000 loops each)\n>>> %timeit s[::-1]\n157 ns \xc2\xb1 3.96 ns per loop (mean \xc2\xb1 std. dev. of 7 runs, 10000000 loops each)\nRun Code Online (Sandbox Code Playgroud)\n\n对于较大的字符串,运行时的改进正在增加:
\n\n>>> s = s*1000\n>>> %timeit "".join(reversed(s))\n119 \xc2\xb5s \xc2\xb1 2.37 \xc2\xb5s per loop (mean \xc2\xb1 std. dev. of 7 runs, 10000 loops each)\n>>> %timeit s[::-1]\n10.8 \xc2\xb5s \xc2\xb1 123 ns per loop (mean \xc2\xb1 std. dev. of 7 runs, 100000 loops each)\nRun Code Online (Sandbox Code Playgroud)\n\nmacOS 上的 CPython 3.7.0b4。
\n| 归档时间: |
|
| 查看次数: |
105 次 |
| 最近记录: |