s="google"
print("".join(reversed(s))) //elgoog
print(s[::-1]) //elgoog
在上面的代码中,使用了Python 3中的reversed方法和切片方法来反转字符串,它们都显示相同的输出。但在Python编程语言中,哪种方法更有效呢?为什么?
s="google"
print("".join(reversed(s))) //elgoog
print(s[::-1]) //elgoog
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'
str.join
调用之后。 - Chris_Randsreversed
作为一个迭代器,并不会复制整个字符串。谢谢! - jpp在内存效率方面没有显著的差异。由于字符串是不可变的,两种方法都必须复制整个数据。
要检查性能,您可以使用标准库中的timeit
模块。切片明显更快,因为避免了Python代码中的迭代:
>>> s = "google"
>>> %timeit "".join(reversed(s))
612 ns ± 20.8 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)
>>> %timeit s[::-1]
157 ns ± 3.96 ns per loop (mean ± std. dev. of 7 runs, 10000000 loops each)
运行时的提升对于更大的字符串来说是越来越明显:
>>> s = s*1000
>>> %timeit "".join(reversed(s))
119 µs ± 2.37 µs per loop (mean ± std. dev. of 7 runs, 10000 loops each)
>>> %timeit s[::-1]
10.8 µs ± 123 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)
CPython 3.7.0b4 on macOS.