尝试使用递归从嵌套列表中返回所有奇数。不太确定我在这里做错了什么。
def return_odds(a):
odd = []
if isinstance(a, list):
for item in a:
if isinstance(item, list):
return_odds(item)
if isinstance(item, int):
if item % 2 == 1:
odd.append(item)
if isinstance(a, int):
if a % 2 == 1:
odd.append(a)
return odd
答案 0 :(得分:1)
您要从递归中删除返回的值。
典型的递归函数如下所示:
def factorial(n):
if n == 1:
return 1
else:
return n * factorial(n-1)
在您的示例中,当您递归并调用return_odds(item)
时,您没有使用返回的值。尝试以下方法:
def return_odds(a):
odd = []
if isinstance(a, list):
for item in a:
if isinstance(item, list):
odd += return_odds(item)
if isinstance(item, int):
if item % 2 == 1:
even_list.append(item)
if isinstance(a, int):
if a % 2 == 1:
odd.append(a)
return odd
请注意,return_odds(item)
的返回值将附加到您的odd
列表中。
答案 1 :(得分:1)
您的代码中有两个错误。
首先,您要放弃递归调用的返回值。而是使用返回的值扩展列表odd
。
return_odds(item)
# replace by: odd.extend(return_odds(item))
第二,您有一个变量even_list
,该变量无处显示。您可能打算使用现有列表odd
。
even_list.append(item)
# replace by: odd.append(item)
话虽如此,代码中仍然存在概念错误:*它将接受单个int
并以list*
的形式返回。这似乎不是您要求的一部分。取而代之的是,遍历您的输入a
并在简化list
时进行递归调用。
def return_odds(a):
odd_numbers = []
for i in a:
if isinstance(i, list):
odd_numbers.extend(return_odds(i))
elif isinstance(i, int) and i % 2:
odd_numbers.append(i)
# You might also want to determine the behaviour if i is not an int
return odd_numbers
print(return_odds([1, 2, 3, [4, 5, 6, [7, 8, 9]]]))
[1, 3, 5, 7, 9]