这个练习涉及一个codeacademy问题来编写一个函数,它将一个字符串作为输入并反向输出字符串,我已经找到了如何在线完成它的解决方案,我只是困惑为什么我的不做工作:
def reverse(c):
empty=[]
stringsize= len(c)
for x in range(stringsize):
empty[x]=c[stringsize-x]
return empty
答案 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]
......但也许你不允许这样做?