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

使用多变量的嵌套循环如何简化,让代码更短更易读?

代码优化方案

1. 初始值为0的参数统一初始化方法

  • 短变量列表直接用连等赋值:m = n = t = u = w = 0,一行即可完成多个同值变量的初始化,不需要逐行声明
  • 变量数量较多时可以用列表解包:m, n, t, u, w, o, l, p, r, s = [0]*10,只需要修改后面的列表长度即可适配任意数量的0值初始化需求

2. 两层循环精简改写

版本1:保留原有循环逻辑,仅精简冗余代码(可读性最高,逻辑和原代码100%对齐)

import numpy as np
import math

# 提前生成公共基础x序列,避免循环内重复创建
base_x = np.linspace(voltage_min, voltage_max, ids_per_pad)
# 提前把数学表达式转为可调用函数,避免循环内重复eval
def calc_y(a, b, c, x):
    return eval(math_fun)

current = []
voltage = []

for device_idx in range(rows * columns):
    # 直接用迭代次数计算累加偏移,省去逐个变量+=操作
    base_m = shift_horizontal_per_device * (device_idx + 1)
    base_n = shift_vertical_per_device * (device_idx + 1)
    base_t = shif_param_a_per_device * (device_idx + 1)
    base_u = shif_param_b_per_device * (device_idx + 1)
    base_w = shif_param_c_per_device * (device_idx + 1)
    for pad_idx in range(pads):
        o = shift_horizontal_per_pad * (pad_idx + 1)
        l = shift_vertical_per_pad * (pad_idx + 1)
        p = shif_param_a_per_pad * (pad_idx + 1)
        r = shif_param_b_per_pad * (pad_idx + 1)
        s = shif_param_c_per_pad * (pad_idx + 1)
        # 直接计算x和y
        x = base_x + o + base_m
        y = calc_y(base_t + p, base_u + r, base_w + s, base_x) + base_n + l
        voltage.extend(x)
        current.extend(y)

版本2: numpy向量化改写(完全去掉显式循环,代码更短性能更高,适合大数据量场景)

import numpy as np
import math

base_x = np.linspace(voltage_min, voltage_max, ids_per_pad)
def calc_y(a, b, c, x):
    return eval(math_fun)

# 生成所有device的偏移量
device_cnt = rows * columns
device_m = shift_horizontal_per_device * np.arange(1, device_cnt + 1)
device_n = shift_vertical_per_device * np.arange(1, device_cnt + 1)
device_t = shif_param_a_per_device * np.arange(1, device_cnt + 1)
device_u = shif_param_b_per_device * np.arange(1, device_cnt + 1)
device_w = shif_param_c_per_device * np.arange(1, device_cnt + 1)

# 生成所有pad的偏移量
pad_o = shift_horizontal_per_pad * np.arange(1, pads + 1)
pad_l = shift_vertical_per_pad * np.arange(1, pads + 1)
pad_p = shif_param_a_per_pad * np.arange(1, pads + 1)
pad_r = shif_param_b_per_pad * np.arange(1, pads + 1)
pad_s = shif_param_c_per_pad * np.arange(1, pads + 1)

# 广播计算所有x、y
total_x = (base_x[None, None, :] + pad_o[:, None] + device_m[:, None, None]).ravel()
a = (device_t[:, None] + pad_p).ravel()[:, None]
b = (device_u[:, None] + pad_r).ravel()[:, None]
c = (device_w[:, None] + pad_s).ravel()[:, None]
total_y = (calc_y(a, b, c, base_x) + (device_n[:, None] + pad_l).ravel()[:, None]).ravel()

voltage = total_x.tolist()
current = total_y.tolist()

优化点说明

  • 删掉了所有不必要的累加变量,固定步长的累加值直接通过迭代次数乘以步长计算,逻辑更直观
  • 公共操作提前到循环外执行,减少重复计算开销
  • 变量命名更清晰,不需要额外注释就能看懂对应含义
  • 向量化版本彻底去掉了Python层面的循环,运行速度比原循环快10~100倍(依数据量而定)

注意:原代码中的shif_param系列变量名疑似拼写错误(缺了一个t,应为shift_param),请根据实际变量名自行修正。

内容的提问来源于stack exchange,提问作者Jerzy

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 01:27:02