You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何优化Python嵌套循环代码,将执行时间降至0.02秒以内?

Python代码加速优化方案

针对你提供的代码(处理11万个子列表,每个约10个元素,当前耗时0.221秒,目标无Cython下降至0.02秒内),可以通过消除Python层级循环开销、利用内置优化函数或向量化计算来实现,以下是几种高效方案:

方案1:切片拆分+math.prod(Python3.8+)

直接通过切片拆分奇偶位置元素,用C实现的math.prod计算乘积,彻底替代内层while循环:

import math

result = []
for lst in some_list_of_lists:
    # 拆分出索引0,2,4...的元素(t1的因子)和索引1,3,5...的元素(t2的因子)
    odds = lst[::2]
    evens = lst[1::2]
    t1 = math.prod(odds)
    t2 = math.prod(evens)
    if t1 > t2:
        result.append(lst)

优势:切片和math.prod均为底层优化操作,比手动循环快数倍,代码简洁易读。

方案2:reduce+operator.mul(兼容Python3.8以下)

如果无法使用math.prod,用functools.reduce结合operator.mul实现高效乘积计算:

from functools import reduce
import operator

result = []
for lst in some_list_of_lists:
    t1 = reduce(operator.mul, lst[::2], 1)
    t2 = reduce(operator.mul, lst[1::2], 1)
    if t1 > t2:
        result.append(lst)

优势:同样避免了手动循环的开销,兼容旧版本Python。

方案3:numpy向量化批量计算(最快方案)

若所有子列表长度一致(均为10个元素),用numpy将整个数据集转为二维数组,批量计算乘积:

import numpy as np

# 转换为numpy数组(指定int64避免溢出)
arr = np.array(some_list_of_lists, dtype=np.int64)
# 按行计算奇数列、偶数列的乘积
t1 = arr[:, ::2].prod(axis=1)
t2 = arr[:, 1::2].prod(axis=1)
# 筛选符合条件的子列表并转回原生列表
result = arr[t1 > t2].tolist()

优势:numpy的向量化操作完全基于C实现,计算效率接近Cython,能轻松将耗时压到0.02秒以内。

内容的提问来源于stack exchange,提问作者40k-btc

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 13:45:46