我收到了这行代码,我在语法上难以理解。
def coinsNeeded(coins, price, mincoinList):
return min([mincoinList[price-coin] for coin in coins if coin <= price]) + 1
到目前为止,我所知道的是,coins
和mincoinList
都是整数数组,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