向后循环python字符串的最佳方法是什么?
对于所有-1偏移的需要,以下似乎有点尴尬:
string = "trick or treat"
for i in range(len(string)-1, 0-1, -1):
print string[i]
以下看起来更简洁,但是它实际上会生成一个反向字符串,因此会有轻微的性能损失吗?
string = "trick or treat"
for c in string[::-1]:
print c
答案 0 :(得分:69)
尝试 reversed 内置:
for c in reversed(string):
print c
reversed()调用将生成迭代器而不是复制整个字符串。
PEP 322详细说明 reverse()的动机及其优于其他方法的优势。
答案 1 :(得分:5)
这是一种在不使用内置功能(例如reversed
)的情况下反转字符串的方法。负步长值向后移动。
def reverse(text):
rev = ''
for i in range(len(text), 0, -1):
rev += text[i-1]
return rev
答案 2 :(得分:4)
是的,第二个语法快捷方式会创建一个中间字符串,并且会产生相关的性能损失。
第一个版本写得更好:
for index, char in enumerate(reversed(s)):
print "pos %d: %s" % (index, char)
这很容易理解。 reversed
和enumerate
`都不需要复制字符串。
使用string
作为变量名时也要小心,因为它也是a module in the standard library的名称。
答案 3 :(得分:3)
string = "trick or treat"
for c in string[::-1]:
print c
我会用那个。它可能相当快,虽然可能会有一些更好的方式(但我对此表示怀疑)。
修改强>
实际上,使用我一起攻击的程序进行第二次测试时,reversed
可能是要走的路。
==== Results ====
Sample 1: 0.0225071907043 # Using a for loop
Sample 2: 0.0100858211517 # Using reversed
答案 4 :(得分:3)
Python中的代码通常更快。幸运的是,你不必猜测:
python -mtimeit -s"s='x'*100000" "for x in s[::-1]: pass"
100 loops, best of 3: 1.99 msec per loop
python -mtimeit -s"s='x'*100000" "for x in reversed(s): pass"
1000 loops, best of 3: 1.97 msec per loop
python -mtimeit -s"s='x'*100000" "for i in xrange(len(s)-1, 0-1, -1): s[i]"
100 loops, best of 3: 4.95 msec per loop
所以较短的代码更快一点,但它带来了内存开销。
答案 5 :(得分:2)
reversed
接受一个iterable并返回一个向后移动的迭代器。 string[::-1]
很好,但它会创建一个新的反向字符串。如果你只是想迭代,那么这可能会更好:
for c in reversed(string):
print c
如果您想在之后使用反向字符串,则创建一次会更好。
答案 6 :(得分:2)
string = "trick or treat"
for c in reversed(string):
print c
会做我认为你想要的。它使用迭代器。这应该适用于已实现__reveresed __()或__len __()和__getitem __()的任何事情。 __getitem __()必须从0开始接受int参数。
答案 7 :(得分:1)
def reverse(text):
x = ""
for i in range(len(text)):
x = x + text[len(text)-i-1]
return x
答案 8 :(得分:1)
使用For循环
在Python中反转字符串outputStr = ''
a = raw_input("Enter String: ")
for i in range(len(a), 0, -1):
outputStr += a[i-1]
print outputStr
答案 9 :(得分:0)
使用enumerate
和reversed
方法的Python 3:
string = "trick or treat"
for i, c in enumerate(reversed(string)):
print(i, c)
您可以使用print(c)来检索没有索引的每个字符。
答案 10 :(得分:-1)
字符串反向
def reverse(a_string):
rev = ''
for i in range(len(a_string)-1, -1, -1):
rev = rev + a_string[i]
return rev
print(reverse("This string should be reversed!"))
输出为: !desrever eb dluohs siirT