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

请教关于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日

悬赏问题

  • ¥50 寻找一位有逆向游戏盾sdk 应用程序经验的技术
  • ¥15 请问有用MZmine处理 “Waters SYNAPT G2-Si QTOF质谱仪在MSE模式下采集的非靶向数据” 的分析教程吗
  • ¥50 opencv4nodejs 如何安装
  • ¥15 adb push异常 adb: error: 1409-byte write failed: Invalid argument
  • ¥15 nginx反向代理获取ip,java获取真实ip
  • ¥15 eda:门禁系统设计
  • ¥50 如何使用js去调用vscode-js-debugger的方法去调试网页
  • ¥15 376.1电表主站通信协议下发指令全被否认问题
  • ¥15 物体双站RCS和其组成阵列后的双站RCS关系验证
  • ¥15 复杂网络,变滞后传递熵,FDA