python - 我该如何优化这段代码?也许通过列表理解?
问题描述
我需要加速这段代码:
我认为我可以做的第一件事是修改获取列表的方式,这就是我用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]
推荐阅读
- javascript - 会话 cookie 只用 Java Script 播放声音一次
- android - DynamoDB 嵌套项目插入 Android
- unity3d - 刚体 2D 不会停止
- javascript - 如何在 JavaScript 中的每个 for 循环迭代之间暂停
- node.js - Nest 无法解析 JobsService (?) 的依赖关系。请确保索引 [0] 处的参数 JobModel 在 AppModule 上下文中可用
- python - Python Socket 多个客户端 - 聊天应用程序
- c++ - C ++中具有相同值的多个键的数据结构
- python - Keras中临时合并batch维度
- assembly - 为什么我用了两次'mov ah,9',但屏幕只打印了一次?
- flutter - 如何处理 Listview.builder 中的多个复选框?