1

我正在尝试学习 Python 3.x 的动态编程和递归。下面的代码是我教科书中的一个简单示例:

def recMC(coinValueList, change):
    minCoins = change
    if change in coinValueList:
        return 1
    else:
        for i in [c for c in coinValueList if c <= change]:
            numCoins = 1 + recMC(coinValueList, change-i)
            if numCoins < minCoins:
                minCoins = numCoins
        return minCoins

print(recMC([1,5,10,25], 63))

我真的很难理解这里的第 6 行,即行理解。我完全不确定这里发生了什么,以及如何将其分解为循环以便更容易理解。这是我目前的想法:

for i in c:
    for c in coinValueList:
        if c<= change:

但我不明白这是如何迭代的。也许知识渊博的人可以用与我的书和教授不同的方式来解释这一点?

4

2 回答 2

1

让我解释

[c for c in coinValueList if c <= change]

创建新列表,其中coinValueList 的值小于change内部 在此之后您迭代新列表。

注意如果您坚持在那里使用理解,请考虑生成器语句它将以相同的方式工作,但不会消耗内存。

所以循环的结果不应该是

for i in c:
    for c in coinValueList:
        if c<= change:

for i in coinValueList:
    if i<= change:
于 2013-10-24T07:32:47.797 回答
1
for i in [c for c in coinValueList if c <= change]:

是相同的:

coins = []
for c in coinValueList:
    if c <= change:
        coins.append(c)

for i in coins:
    #do your stuff

列表理解更容易编码和更好地阅读。
列表理解是“python 方式”。

于 2013-10-24T08:05:00.330 回答