python - 有没有办法优化这个 python 尝试,除了循环?
问题描述
通常,代码包含一个列表列表 ( series_
),其中使用列表的初始值作为基础,搜索每个列表中满足特定条件的第一个值。
但是,某些列表不包含满足该标准的值(异常起作用并向Compra_
列表添加任意值)。我有兴趣优化try
/except
部分,因为我正在处理数百万个数据并且运行代码需要几个小时。
for i in range(len(d)):
series_.append(np.array(data2.Close[d[i]:]))
Compra_ = []
for i in series_:
try:
Compra_.append(next(filter(lambda x: x - i[0] >= TH or i[0] - x >= M*TH, i)))
except:
Compra_.append(i[0])
我知道这样的事情会起作用,但是当不满足标准时,它会停止迭代。
Compra_ = [next(filter(lambda x: x - i[0] >= TH or i[0] - x >= M*TH, i)) for i in series_]
解决方案
您可以像这样简化和减少开销:
def compra():
m_th = M*TH
th = TH
return [
next(
(x for x in xs if x - xs[0] >= th or xs[0] - x >= m_th),
xs[0]
)
for xs in series_
]
Compra_ = compra()
这使用了默认参数next()
,避免了每个循环的乘法开销,并使用了一个genexpr而不是一个filter()
调用。我将它包装在一个函数中,因为本地人的阅读速度比全局人快。让我知道这是否更快。
推荐阅读
- javascript - 如何以编程方式绘制粗线 JavaScript?
- c# - 将相对源根父控件的属性绑定到子类的附加属性 - 使应用程序崩溃
- vagrant - 配置脚本运行后同步文件夹?
- excel - 在excel中查找每一行和每一列的相交值
- javascript - React Dropdown acessibility onClick
- xcode - Casting NSSEt in an conditional statement
- python - Unexpected indent and other errors
- python - Topic modelling with gensim
- python-3.x - Capping the outliers
- python-3.x - Create new Z-Score column based off unique text values in an existing column