【问题标题】:Explanation of List Comprehensions列表推导说明
【发布时间】:2013-11-02 18:54:55
【问题描述】:

我正在尝试学习 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:

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

【问题讨论】:

    标签: python recursion python-3.x list-comprehension


    【解决方案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 方式”。

    【讨论】:

    • list 是变量名的糟糕选择,因为它会影响内置的 list() 方法。
    • @BurhanKhalid - 是的,你是对的!我已经用“硬币”替换了“列表”
    【解决方案2】:

    让我解释一下

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

    使用来自coinValueList 的值创建新列表,其中小于change 在此之后您迭代新列表。

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

    所以for循环的结果不应该是

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

    但是

    for i in coinValueList:
        if i<= change:
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-16
      相关资源
      最近更新 更多