使用for循环迭代返回最小数组

时间:2015-11-15 21:27:35

标签: python

我收到了这行代码,我在语法上难以理解。

def coinsNeeded(coins, price, mincoinList):
     return min([mincoinList[price-coin] for coin in coins if coin <= price]) + 1

到目前为止我所知道的是coinsmincoinList都是整数数组,price也是整数。

根据我的理解,min()函数需要一个可迭代或两个参数,所以我不太清楚在min()函数中要比较的值是什么。

2 个答案:

答案 0 :(得分:2)

min([mincoinList[price-coin] for coin in coins if coin <= price]) + 1

让我们分析这一行!

这部分的核心部分是以下列表理解:

[mincoinList[price-coin] for coin in coins if coin <= price]

列表推导是一种通过循环某个序列来创建列表的方法。在这种情况下,我们正在为mincoinList[price - coin]列表中的每个coin创建一个包含值coins的元素的列表,如果 coin的值低于或等于price

换句话说,它选择那些低于价格的硬币,然后对于每一个,它从mincoinList获得一个元素,其中价格和硬币的差异作为索引。

最后,该列表被传递给min(),它只返回具有最低值的列表中的元素。然后将该值加1并从函数返回。

你可以用这样一个非常详细的多行代码写出这一切:

selectedCoins = []
for coin in coins:
    if coin <= price:
        selectedCoins.append(mincoinList[price - coin])

return min(selectedCoins) + 1

答案 1 :(得分:1)

您的代码:

def coinsNeeded(coins, price, mincoinList):
     return min([mincoinList[price-coin] for coin in coins if coin <= price]) + 1

有一个列表理解,相当于:

def coinsNeeded(coins, price, mincoinList):
     minCoinNeeded = []
     for coin in coins:
         if coin <= price:
             minCoinNeeded += mincoinList[price-coin]
     return min(minCoinNeeded) + 1