向后循环python字符串的最佳方法

时间:2011-11-01 01:07:27

标签: python string optimization iterator reverse

向后循环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

11 个答案:

答案 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)

这很容易理解。 reversedenumerate`都不需要复制字符串。

使用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)

使用enumeratereversed方法的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