我的函数接收一个列表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)
应该返回
[]
但是,我的输出是正确的输出,但是用单行分隔并以[]
结尾。
答案 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,[]))