我提出了一个问题:
我正在编写一个接受两个参数的函数:rug_length
和prices
,rug_length
是一个整数,表示要购买多少米的地毯,prices
是一本字典,它保存地毯不同长度的价格,其中键是长度,值是价格。
函数调用的示例:
rug_length = 10
prices = {1:2, 2:3, 3:1, 4:5, 5:4}
fn(rug_length, prices)
该函数需要返回选定长度的地毯的最小成本,因此例如:
fn(1, prices) # returns 2
fn(3, prices) # returns 1
fn(5, prices) # returns 4
fn(6, prices) # returns 2 ( 1 + 1 )
fn(8, prices) # returns 5 ( 1 + 1 + 2 )
fn(9, prices) # returns 3 ( 3 + 3 + 3 )
我想我要按一米的价格对字典进行排序。
我写了两个函数:
def fn(rug_length, prices):
if rug_length == 0:
return 0
cost = 0
while rug_length > 0:
for key, v in sorted(prices.items(), key=(lambda item : (item[1]/item[0]))):
while rug_length >= key:
rug_length -= key
cost += prices[key]
return cost
%%timeit -n 250
fn(245245, price)
# 4.54 ms ± 25 µs per loop (mean ± std. dev. of 7 runs, 250 loops each)
第二个:
def fn_2(rug_length, prices):
if rug_length == 0:
return 0
cost = 0
prices = sorted(prices.items(), key=(lambda item : (item[1]/item[0])))
while rug_length > 0:
for key,v in prices:
cost += (rug_length//key)*v
rug_length%=key
return cost
%%timeit -n 250
fn_2(245245, price)
# 1.76 µs ± 54 ns per loop (mean ± std. dev. of 7 runs, 250 loops each)
有改进的地方吗?