Как построить список рекурсивно с учетом только длины? - PullRequest
2 голосов
/ 28 октября 2019

Я пытаюсь написать рекурсивную функцию, которая принимает число n и некоторое значение, скажем, 'a', и рекурсивно создает список, состоящий из n 'a' с.

Итак, func(4, 'a') возвращает ['a','a','a','a'].

Мои поиски в Интернете до сих пор были на удивление бесполезными. Большинство примеров рекурсии списка, которые я обнаружил, принимают дополнительные параметры.

Я пробовал различные версии следующего кода:

def func(n, a):
    if n == 1:
        return [a]
    else:
        return func(n-1, a).append(a)

Я получаю cannot append to NoneType ошибок в последнем возвращении. Итак, func(n-1,a) возвращает None.

Ответы [ 3 ]

2 голосов
/ 28 октября 2019

list.append возвращает только None, поскольку его целью является обновление целевого списка на месте. Вместо добавления просто добавьте:

def func(n, a):
   if n == 1:
      return [a]
   else:
      return func(n-1, a) + [a]

print(func(4, 'a'))

Вывод:

['a', 'a', 'a', 'a']

Кроме того, вы можете рассмотреть возможность использования генераторов для получения более чистого (и более короткого) результата:

def func(n, a):
  if n:
    yield a
    yield from func(n-1, a)

print(list(func(4, 'a')))

Выход:

['a', 'a', 'a', 'a']
0 голосов
/ 28 октября 2019

Поскольку метод list.append возвращает None, вы должны сделать это следующим образом, если хотите использовать метод append:

def func(n, a):
    if n == 1:
        return [a]
    else:
        temp = func(n-1, a)
        temp.append(a)
        return temp

print(func(5, 'a'))

Отпечатки:

['a', 'a', 'a', 'a', 'a']
0 голосов
/ 28 октября 2019

Должен ли он быть рекурсивным?

def func (n, a): a_list = [] для i в диапазоне (n): a_list.append (str (a)) вернуть a_list

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