Tony_Lok 2022-12-17 14:44 采纳率: 100%
浏览 48
已结题

请教关于python双重for循环的优化问题

想请教网友们,我想优化python双重的for循环,请问可以如何去优化呢?在此感谢解答疑难!

import time
start=0
end=0
def test():
    global start,end
    n=0
    while n<10:
        start_time=time.time()

        for i in range(1,10000):
            for j in range(i,10000):
                a=i+j
                #此处省略叭叭叭行代码
                
        end_time=time.time()
        start+=start_time
        end+=end_time
        n+=1
test()
#检查运行耗时
print('耗时:%.2f秒'%(end-start))

  • 写回答

2条回答 默认 最新

  • ShowMeAI 2022-12-17 15:00
    关注

    望采纳


    可以尝试以下几种方法来优化双重的 for 循环:

    • 使用多线程: 可以使用 Python 的 threading 模块或者其他第三方库来创建多线程,将循环的每一步放到不同的线程中执行。
    • 使用 numpy: 如果你的循环中执行的是数学运算,可以使用 numpy 库来优化。numpy 库使用 C 语言编写,运行速度很快,可以帮助你快速完成大量的数学运算。
    • 使用 Cython: Cython 是一个 Python 编译器,可以将 Python 代码编译成 C 代码,然后再使用 C 的运行速度来执行。这样可以大大提高代码的运行速度。

    第1种方法实现如下(先通过pip install threading安装threading库):

    import threading
    
    def test():
        n=0
        while n<10:
            start_time=time.time()
     
            threads = []
            for i in range(1,10000):
                t = threading.Thread(target=inner_loop, args=(i,))
                threads.append(t)
                t.start()
            for t in threads:
                t.join()
            
            end_time=time.time()
            start+=start_time
            end+=end_time
            n+=1
    
    def inner_loop(i):
        for j in range(i,10000):
            a=i+j
            #此处省略叭叭叭行代码
    
    test()
    #检查运行耗时
    print('耗时:%.2f秒'%(end-start))
    

    第2种方式实现如下(先通过pip install numpy安装numpy库):

    import numpy as np
    
    def test():
        n=0
        while n<10:
            start_time=time.time()
     
            for i in range(1,10000):
                for j in range(i,10000):
                    a = np.add(i, j)
                    #此处省略叭叭叭行代码
            
            end_time=time.time()
            start+=start_time
            end+=end_time
            n+=1
    
    test()
    #检查运行耗时
    print('耗时:%.2f秒'%(end-start))
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 12月30日
  • 已采纳回答 12月22日
  • 创建了问题 12月17日

悬赏问题

  • ¥15 装 pytorch 的时候出了好多问题,遇到这种情况怎么处理?
  • ¥20 IOS游览器某宝手机网页版自动立即购买JavaScript脚本
  • ¥15 手机接入宽带网线,如何释放宽带全部速度
  • ¥30 关于#r语言#的问题:如何对R语言中mfgarch包中构建的garch-midas模型进行样本内长期波动率预测和样本外长期波动率预测
  • ¥15 ETLCloud 处理json多层级问题
  • ¥15 matlab中使用gurobi时报错
  • ¥15 这个主板怎么能扩出一两个sata口
  • ¥15 不是,这到底错哪儿了😭
  • ¥15 2020长安杯与连接网探
  • ¥15 关于#matlab#的问题:在模糊控制器中选出线路信息,在simulink中根据线路信息生成速度时间目标曲线(初速度为20m/s,15秒后减为0的速度时间图像)我想问线路信息是什么