首页 > 解决方案 > 我该如何优化这段代码?也许通过列表理解?

问题描述

我需要加速这段代码:

我认为我可以做的第一件事是修改获取列表的方式,这就是我用BOLD写的部分。

¿ 一些想法?我尝试使用列表理解来做到这一点,但总是给我分配前引用的错误。

def transform(A, x):
    
    from math import factorial
    
    def comb(i,x):
        return factorial(i)/(factorial(x)*factorial(i-x))

    lis = []

    # --- FROM HERE ---
    for i in A:
        suma = 0
        for j in range(x,i+1):
            suma += comb(j,x)
        lis.append(suma)
    # --- TO HERE ---

    return lis
    
    res = lis[0]  
    
    for i in lis[1:]:
        res = int(res) ^ int(i)
                                        
    return res

谢谢

标签: pythonlistoptimizationtimelist-comprehension

解决方案


我将实际回答您的具体问题,尽管正如上面每个人所提到的,它几乎肯定不会提高您的跑步速度。你有:

    suma = 0
    for j in range(x,i+1):
       suma += comb(j,x)

这可以变成一个总和:

    suma = sum(comb(j, x) for j in range(x, i + 1))

你的外循环是:

lis = []
for i in A:
    suma = sum(....) # See code above
    lis.append(suma)

这可以变成以下列表理解:

lis = [sum(....) for i in A]

推荐阅读