【问题标题】:How to speed up for-loop or use an alternative method?如何加快 for 循环或使用替代方法?
【发布时间】:2020-11-07 14:00:03
【问题描述】:

我有什么方法可以加快这个 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)

【问题讨论】:

  • 请遵循python命名约定,变量应小写;)
  • 这个问题更适合Code Review
  • @stovfl 在建议用户在 CR 上发帖时,如果还有类似“请阅读相关帮助中心页面,例如 'What topics can I ask about here?' 和 'How do I ask a good question?”。在当前形式中,需要更新标题以描述代码的作用,而不是 OP 的更改目标。

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


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-11-14
    • 2018-10-03
    • 1970-01-01
    • 1970-01-01
    • 2019-09-13
    • 1970-01-01
    • 1970-01-01
    • 2019-10-11
    相关资源
    最近更新 更多