clw*_*wen 41 python string optimization reverse iterator
向后循环python字符串的最佳方法是什么?
对于-1偏移的所有需要,以下似乎有点尴尬:
string = "trick or treat"
for i in range(len(string)-1, 0-1, -1):
print string[i]
Run Code Online (Sandbox Code Playgroud)
以下看起来更简洁,但实际上它是否产生了反向字符串,因此会有轻微的性能损失?
string = "trick or treat"
for c in string[::-1]:
print c
Run Code Online (Sandbox Code Playgroud)
Ray*_*ger 75
尝试颠倒的内置:
for c in reversed(string):
print c
Run Code Online (Sandbox Code Playgroud)
该扭转()调用会使一个迭代器,而不是复制整个字符串.
PEP 322详述了reverse()的动机及其优于其他方法的优点.
string = "trick or treat"
for c in string[::-1]:
print c
Run Code Online (Sandbox Code Playgroud)
我会用那个。尽管可能有更好的方法(但我对此表示怀疑),但它可能相当快。
编辑:
实际上,使用我编写的程序进行第二次测试reversed可能是正确的方法。
==== Results ====
Sample 1: 0.0225071907043 # Using a for loop
Sample 2: 0.0100858211517 # Using reversed
Run Code Online (Sandbox Code Playgroud)
是的,第二个语法快捷方式创建一个中间字符串并具有相关的性能损失。
第一个版本更好地写为:
for index, char in enumerate(reversed(s)):
print "pos %d: %s" % (index, char)
Run Code Online (Sandbox Code Playgroud)
这很容易理解。reversed`和`都不enumerate需要复制字符串。
string用作变量名时也要小心,因为它也是标准库中模块的名称。
reversed接受一个迭代器并返回一个向后移动的迭代器。string[::-1]很好,但它会创建一个新的反向字符串。如果您只想迭代,那么这可能会更好:
for c in reversed(string):
print c
Run Code Online (Sandbox Code Playgroud)
如果以后要使用反转的字符串,创建一次会更好。
这是一种在不使用内置功能的情况下反转字符串的方法reversed.负步长值向后移动.
def reverse(text):
rev = ''
for i in range(len(text), 0, -1):
rev += text[i-1]
return rev
Run Code Online (Sandbox Code Playgroud)