Python String Reversal

时间:2014-02-05 13:27:22

标签: python string

这个练习涉及一个codeacademy问题来编写一个函数,它将一个字符串作为输入并反向输出字符串,我已经找到了如何在线完成它的解决方案,我只是困惑为什么我的不做工作:

def reverse(c):
    empty=[]
    stringsize= len(c)

    for x in range(stringsize):
        empty[x]=c[stringsize-x]

    return empty

5 个答案:

答案 0 :(得分:4)

您需要开始将字符串从-1索引到-stringsize,然后使用empty.append()添加值:

for x in range(stringsize):
    empty.append(c[stringsize - x - 1])

Python索引从0开始,使stringsize - 1成为最后一个索引。由于empty是一个空列表,因此您无法将其编入索引。使用list.append()方法会在最后添加新值。

你并不真正需要那里的stringsize引用,因为从你的长度中自动减去负指数:

for x in range(len(c)):
    empty.append(c[-x-1])

由于这应该返回一个字符串而不是一个列表,你需要在最后再次加入字符:

return ''.join(empty)

反转列表的最简单方法是使用负切片步幅:

def reverse(c):
    return c[::-1]

答案 1 :(得分:2)

一个解决方案:

def reverse(c):
    empty=[]
    stringsize= len(c)
    for x in range(stringsize):
        empty.append(c[-(x+1)])
    return ''.join(empty)

print reverse('string')

<强>另一个

    def reverse(c):
    empty=[]
    stringsize= len(c)
    for x in range(stringsize):
        empty.append(c[stringsize - (x+1)])
    return ''.join(empty)

print reverse('string')

使用递归:

    def reverse(string,start,stop):
    if start < stop - 1:
        string[start],string[stop - 1] = string[stop - 1],string[start]
        reverse(string,start+1, stop-1)
    return ''.join(string)

print reverse(list('string'), 0, len('string'))

答案 2 :(得分:1)

在Python中,字符串是iterable,因此可以使用可迭代的函数。例如reversed函数:

>>> "".join(reversed("123"))
'321'

答案 3 :(得分:1)

使代码运行所需的最少更改似乎是:

def reverse(c):
    stringsize= len(c)
    empty=[None] * stringsize

    for x in range(stringsize):
        empty[x]=c[stringsize-x-1]

    return empty

但是你应该重新考虑你的名字empty(正如Martijn指出的那样),因为那个东西不是(至少在最后),所以这个名字具有误导性。

答案 4 :(得分:1)

这个问题的经典答案是使用带有负步骤的切片来获得你想要的东西:

def reverse(c):
    return c[::-1]

......但也许你不允许这样做?