python字符串逆转



此练习涉及一个编码问题,以编写一个函数,该函数将字符串作为输入并反向输出字符串,我找到了有关如何在线进行操作的解决方案,我我只是为何不起作用而感到困惑:

def reverse(c):
    empty=[]
    stringsize= len(c)
    for x in range(stringsize):
        empty[x]=c[stringsize-x]
    return empty

您需要从将字符串从-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]

一个解决方案:

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'))

在python中,字符串是iterable,因此可以与其一起使用。例如reversed功能:

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

使您的代码运行似乎是:

def reverse(c):
    stringsize= len(c)
    empty=[None] * stringsize
    for x in range(stringsize):
        empty[x]=c[stringsize-x-1]
    return empty

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

此问题的经典答案是使用带有负步骤的切片来获取您想要的东西:

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

...但是也许不允许您?