将列表递归复制到python中的另一个列表

时间:2018-09-12 15:23:42

标签: python list recursion copy

我想在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()    `       

2 个答案:

答案 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()