优化功能

时间:2020-08-12 10:45:09

标签: python optimization timeit

我提出了一个问题:

我正在编写一个接受两个参数的函数:rug_lengthpricesrug_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)

有改进的地方吗?

0 个答案:

没有答案