您好我正在尝试使用以下代码反转字符串。有没有人在这看到这个错误?
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)
答案 0 :(得分:5)
有多个错误:
newstring[i]
和newstring[last -i]
。可能还有更多。
最后,我认为你让自己太难了:
In [1]: 'abcdef'[::-1]
Out[1]: 'fedcba'
这使用切片语法,start:stop:step
。通过省略start
和stop
,我们将整个字符串,而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)