返回带有 for 循环迭代的最小数组



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

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

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

根据我的理解,min()函数需要一个或两个可迭代的参数,所以我不太明白min()函数中比较了哪些值。

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

让我们把这条线分开!

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

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

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

因此,换句话说,它选择那些低于价格的硬币,然后对于每个硬币,它从mincoinList中获取一个元素,以价格和硬币的差异作为指数。

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


你可以用一个非常冗长的多行代码来编写这一切,如下所示:

selectedCoins = []
for coin in coins:
    if coin <= price:
        selectedCoins.append(mincoinList[price - coin])
return min(selectedCoins) + 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

最新更新