我想在python中将列表递归复制到另一个列表。为此,我已将字符串作为输入,定义了一个空列表,并将其作为列表发送给递归函数,以便我可以将该列表复制到另一个列表。但是,错误显示“ NoneType”对象没有属性“ append”。 我想念什么?我已经将“ S”定义为main()中的列表。 如果还有其他递归方法,则欢迎使用它们。
显示错误:
line 35, in string_copy
return string_copy(k,s.append(k[i]),i+1)
AttributeError: 'NoneType' object has no attribute 'append'
代码是:
def string_copy(k,s,i):
if (i == len(k)):
return s;
else:
return string_copy(k,s.append(k[i]),i+1)
def main():
print("enter the string you want to copy:");
k = input();
s = [None];
i = 0;
print("the type of k and s is:", type(k),type(s));
res = string_copy(list(k),list(s),i);
print("the desired results are:","\n", res);
if __name__ == "__main__": main() `
答案 0 :(得分:1)
return string_copy(k,s.append(k[i]),i+1)
列表append()
方法不返回更新后的列表;它就地添加新项目并返回None
。
因此,下一次对string_copy()
的调用将以None
作为s
的值。
答案 1 :(得分:0)
最终的解决方案是:
def string_copy(k,s,i):
if (i == len(k)):
return s
else:
s.append(k[i])
return string_copy(k,s,i+1)
def main():
print("enter the string you want to copy:")
k = input()
s = ""
i = 0;
print("the type of k is:", type(k))
res = string_copy(list(k),list(s),i)
print("the desired results are:","\n", "".join(res))
if __name__ == "__main__": main()
解决此问题的更好方法:
def string_copy(k):
if (len(k) == 0):
return k
else:
return k[0] + string_copy(k[1:])
def main():
print("enter the string you want to copy:")
k = input()
print("the type of k is:", type(k))
res = string_copy(k)
print("the copied string is:","\n",res)
if __name__ == "__main__": main()