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

望采纳


可以尝试以下几种方法来优化双重的 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))
from numba import jit
import time
@jit()
def add_ab():
    a = list(range(5000))
    b = list(range(5000))
    start = time.time()
    for i in range(5000):
        for j in range(5000):
            c = a[i] + b[j]
    print(time.time()-start)
add_ab()

望采纳