如何加快循环速度或使用替代方法?

时间:2020-07-17 17:59:42

标签: python python-3.x performance for-loop list-comprehension

有什么方法可以加快此for循环或使用其他方法?我当时正在考虑对地图或列表进行某种理解。

Query = [5,7,9,10,12,13,14,16]
Top = range(1,30)
X = range(5,17)
Limit = range(1,20)


Results = []

#Test1 is a function
for Q in tqdm(Query):
    for t in Top:
        for x1 in X:
            for l in Limit:
                df1 = Test1(df = pred2,Results = QBResults,Query = Q ,Top = t, X = x1, Limit = l)
                df2 = Test1(df = TestDF,Results = QBResults,Query = Q ,Top = t, X = x1, Limit = l)
                df1['Query'] = Q
                df1['Top'] = t
                df1['X'] = x1
                df1['Limit'] = l
                df1['Df1AggScore'] = df1['AggScore']
                df1['Df2AggScore'] = df2['AggScore']
                df1['Df1TopScore'] = df1['TopScore']
                df1['Df2TopScore'] = df2['TopScore']
                df1['Diff'] = np.abs(df1['Df1AggScore'] - df1['Df2AggScore'])
                df1['Diff'] = np.abs(df1['Df1TopScore'] - df1['Df2TopScore'])
                Results.append(df1)
Opt = pd.concat(Results)
Opt.sort_values(by='Df2TopScore', ascending=False)

1 个答案:

答案 0 :(得分:0)

itertools模块具有函数product,该函数返回笛卡尔乘积生成器。使用此功能,您的代码可以从使用四个for循环重构为使用一个循环。

from itertools import product
for Q, t, x1, l in product(tqdm(Query), Top, X, Limit):
    ...