Python 一行 For 循环,如果: 请解释一下?

Python One Line For Loop With If: Please Explain?

我是 python 的新手,有件事总是让我感到困惑,那就是当代码被分成 1 行时。以下面的例子:

def how_sum(targert_sum, numbers):
    table = [None] * (targert_sum + 1)
    table[0] = []
    for i in range(targert_sum):
        if table[i] is not None:
            numbers = [num for num in numbers if i + num <= targert_sum]
            for num in numbers:
                table[i + num] = table[i] + [num]
    return table[-1]

numbers = [num for num in numbers if i + num <= targert_sum] 这行让我很困惑。我尝试将其分解,使其不在 1 行中,如下所示:

def how_sum(targert_sum, numbers):
    table = [None] * (targert_sum + 1)
    table[0] = []
    for i in range(targert_sum):
        if table[i] is not None:
            for num in numbers:
                if (i + num <= targert_sum):
                    numbers = [num]
            for num in numbers:
                table[i + num] = table[i] + [num]
    return table[-1]

谁能解释我哪里出错了,并可能明确地写出扩展的嵌套 for-if 语句?

编辑:我认为提供一些问题背景可能会有所帮助。我在自学一些算法的同时试图解决“如何求和”的问题。目标是有一些目标数字(ex 7)和一个列表(ex [2, 3])并检查列表的元素如何添加到 7(所以 [2, 2, 3])

列表理解等同于附加到结果变量。

但结果变量必须以空列表开头。 由于您的结果变量与您正在迭代的变量相同,因此您需要为结果使用不同的变量,然后您可以将其复制到原始变量(这实际上是列表理解内部发生的事情)。

def how_sum(targert_sum, numbers):
    table = [None] * (targert_sum + 1)
    table[0] = []
    for i in range(targert_sum):
        if table[i] is not None:
            result = []
            for num in numbers:
                if (i + num <= targert_sum):
                    result.append(num)
            numbers = result
            for num in numbers:
                table[i + num] = table[i] + [num]
    return table[-1]

列表理解是一种创建新列表的方法。它允许您从任何可迭代对象创建列表。您可能想知道,既然我们有一个 list() 函数,为什么还需要列表推导式。显然,列表理解不仅用于将某些可迭代对象中的元素复制到列表中,而且主要用于以某种方式修改它们以创建特定的新列表。