Как исправить отдельные выводы в рекурсивном списке - PullRequest
0 голосов
/ 25 июня 2019

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

def multiples(L,n):
    if len(L) == 0:
        return []
    if L[0]%n == 0:
        print(L[0])
    return multiples(L[1:],n)

Например:

multiples([1,2,3,4,5,6,7,8,9,10],2)

должен вернуть список:

[2, 4, 6, 8, 10]

и

multiples([1,2,3,4,5,6,7,8,9,10],5)

должен вернуть список

[5, 10]

и

 multiples([3,6,9,12],5)

должен вернуть

 []

Однако мои выходные данные являются правильными, но разделены одной строкой и заканчиваются на [].

Ответы [ 3 ]

0 голосов
/ 25 июня 2019

Вы можете сделать это проще с пониманием списка:

a = [i for i in range(11)] # [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
n = 5
result = [x for x in a if x % n == 0] # [5, 10]
0 голосов
/ 25 июня 2019

Все, что вам нужно сделать, это добавить дополнительный параметр, вызвать его arr, который будет содержать все элементы, кратные n, и инициализировать его пустым при каждом вызове multiples:

def multiples(L,n,arr):
    if len(L) == 0:
        return arr
    if L[0] % n == 0:
        arr.append(L[0])
    return multiples(L[1:],n,arr)

print(multiples([1,2,3,4,5,6,7,8,9,10],2,[]))
print(multiples([1,2,3,4,5,6,7,8,9,10],5,[]))
print(multiples([3,6,9,12],5,[]))

Это даст:

[2, 4, 6, 8, 10]
[5, 10]
[]
0 голосов
/ 25 июня 2019

Если вы действительно хотите сделать это с помощью рекурсии

def multiples(L,n):
    if len(L) == 0:
      return []
    else:
      if L[0]%n == 0:
        return [L[0]] + multiples(L[1:],n)
      else:
        return multiples(L[1:],n)

но, как отмечено в комментариях других, это может быть излишним, и простой встроенный цикл for сделает это просто отлично

[i for i in L if i % n == 0]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...