рекурсивно скопировать список в другой в python - PullRequest
0 голосов
/ 12 сентября 2018

Я хочу скопировать список в другой рекурсивно в Python.Для этого я взял строку в качестве входных данных, определил пустой список и отправил их в рекурсивную функцию в виде списков, чтобы я мог скопировать список в другой список.Тем не менее, ошибка отображает «NoneType» объект не имеет атрибута «добавить».Что мне не хватает?я определил "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 голосов
/ 13 сентября 2018

Окончательное решение:

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()  
0 голосов
/ 12 сентября 2018

return string_copy(k,s.append(k[i]),i+1)

Метод list append() не возвращает обновленный список;он добавляет новый элемент на место и возвращает None.

Поэтому следующий вызов string_copy() будет иметь None в качестве значения для s.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...