【问题标题】:One line recursive loop in pythonpython中的一行递归循环
【发布时间】:2017-11-13 09:49:38
【问题描述】:

我想将此函数重写为常规循环:

def combine(n,k):
    if k == 0:
        return [[]]

    return [pre + [i] for i in range(1, n + 1) for pre in combine(i - 1, k - 1)]

因为我无法调试循环的每个步骤。例如,pre 在内部循环中存储了什么?

这是一个任务: 给定两个整数 n 和 k,返回 1 ... n 中 k 个数字的所有可能组合。

【问题讨论】:

  • 你卡在哪里了?你尝试了什么?
  • 用递增的值调用它并打印结果?
  • 那是list comprehension,在我看来你的缩进是错误的。

标签: python loops for-loop recursion


【解决方案1】:

这个函数的核心列表理解是建立一个最终返回的隐式列表。我们可以展开函数,删除推导,并使用显式列表:

def combine(n, k):
    """
    Given two integers n and k, return all possible
    combinations of k numbers out of 1 ... n.
    """

    result = []

    if k == 0:
        result.append([])
    else:
        for i in range(1, n + 1):
            for pre in combine(i - 1, k - 1):
                result.append(pre + [i])

    return result

print(combine(7, 4))

pre在内部循环中存储了什么?

pre 变量存储递归的各个元素。例如,要获得七位数的所有四位数组合,代码使用递归来计算所有三位数组合,然后对它们进行扩充。该递归结果的元素(每个三位数组合)依次存储在 pre 中。

【讨论】:

    猜你喜欢
    • 2016-07-18
    • 1970-01-01
    • 2011-05-07
    • 1970-01-01
    • 1970-01-01
    • 2022-10-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多