我该如何优化这段代码?可能是通过列表理解?
How can i optimize this code? Maybe though a list comporehension?
我需要加速这段代码:
我认为我能做的第一件事是修改获取列表的方式,这是我在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
谢谢
我将实际回答您的具体问题,尽管正如上面每个人所提到的,它几乎肯定不会提高您的 运行 速度。你有:
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]
我需要加速这段代码:
我认为我能做的第一件事是修改获取列表的方式,这是我在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
谢谢
我将实际回答您的具体问题,尽管正如上面每个人所提到的,它几乎肯定不会提高您的 运行 速度。你有:
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]