我正在尝试学习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:
但我不明白这是如何迭代的。也许知识更丰富的人可以用与我的书和教授不同的方式来解释这个问题吗?
答案 0 :(得分:1)
让我解释一下
[c for c in coinValueList if c <= change]
使用coinValueList
中的值小于change
创建新列表
在此之后,您迭代新列表。
N.B。如果你坚持使用理解那么考虑生成器语句它将以相同的方式工作,但没有内存消耗。
因此循环的结果应该不是
for i in c:
for c in coinValueList:
if c<= change:
但是
for i in coinValueList:
if i<= change:
答案 1 :(得分: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
列表理解更容易编码,更易于阅读 list comprehension是“python-way”。