如何在递归列表中固定单独的输出

时间:2019-06-25 19:58:57

标签: python list recursion

我的函数接收一个列表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 :(得分:0)

如果您真的想通过递归进行操作

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]

答案 1 :(得分:0)

您可以通过列表理解更轻松地做到这一点:

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]

答案 2 :(得分:0)

您要做的就是添加一个额外的参数,将其命名为arr,该参数将容纳所有n的元素,并在每次调用{{1时将其初始化为空}}:

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,[]))