反转字符串的方法

时间:2011-10-11 16:28:02

标签: python string

您好我正在尝试使用以下代码反转字符串。有没有人在这看到这个错误?

def reverse(string):
    length = len(string)
    last = length -1
    middle = length/2
    newstring = []
    for i in range(middle):
            newstring[i] = string[last -i]
            newstring[last -i] = string[i]
    return ''.join(newstring)

5 个答案:

答案 0 :(得分:5)

有多个错误:

  1. 您无法索引到空列表:newstring[i]newstring[last -i]
  2. 您总是成对添加字符,因此结果(如果其他错误已修复)始终具有偶数长度,即使输入字符串具有奇数长度。
  3. 可能还有更多。

    最后,我认为你让自己太难了:

    In [1]: 'abcdef'[::-1]
    Out[1]: 'fedcba'
    

    这使用切片语法,start:stop:step。通过省略startstop,我们将整个字符串,而step=-1只是意味着我们以相反的顺序获取字符。

答案 1 :(得分:1)

你不能newstring[last-i],对吧?这应该返回一个索引错误。

答案 2 :(得分:0)

这个怎么样:

def reverse(string):
        tmp=[]
        for c in string:
            tmp.insert(0,c)
        return ''.join(tmp)    

答案 3 :(得分:0)

您将超出范围,因为您直接指定空列表的索引。在第一遍中,您引用了不存在的newstring[0]

请勿使用名称“string”。它是您最终导入的常见Python模块的名称。看看这个,大多数人都不知道你是否在这里提到模块。

如果你想为教学法做整个手动列表操作,最好将源字符串视为堆栈,将目标列表视为队列,弹出源并将目标排入队列:

def reverse(source):
    source = list(source)
    dest = []
    while source:
        dest.append(source.pop())
    return ''.join(dest)

通常,您不必在Python中使用数字索引来统一影响整个集合的操作。如果你发现自己处于这种状况,你很可能会认为自己太低级了。

我个人会使用扩展切片表示法:

"hello world"[::-1]

离开切片的第一个参数意味着“列表的开头”。离开切片的第二个参数意味着“列表的结尾”。第三个参数表示遍历列表的步骤。通过消极的踩踏你反向遍历列表。

答案 4 :(得分:0)

另一种方式是:

"".join(reversed("abc"))

但可能效率不如aix的Method to reverse a string