此练习涉及一个编码问题,以编写一个函数,该函数将字符串作为输入并反向输出字符串,我找到了有关如何在线进行操作的解决方案,我我只是为何不起作用而感到困惑:
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]
...但是也许不允许您?