返回嵌套列表中的所有奇数

时间:2018-06-20 13:47:28

标签: python

尝试使用递归从嵌套列表中返回所有奇数。不太确定我在这里做错了什么。

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

2 个答案:

答案 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]