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

Pyomo(Python)中创建双索引列表的技术咨询

在Pyomo中构建双索引列表的正确姿势

嗨,我明白你想要构建一个维度明确的双索引列表来存储Pyomo变量x[i,j]的值,已经搞定单索引的你,在双索引这里遇到了小困惑对吧?我来给你捋清楚怎么操作,还会避开常见的坑~

首先,避开浅拷贝的坑

你提到尝试过x = []*value(m.ph),这种方式其实有问题——它会创建一个包含value(m.ph)个同一个空列表引用的列表,之后修改任何一个子列表,所有子列表都会跟着变,这肯定不是你想要的。

方法1:先初始化明确维度的空列表,再填充值

如果你想先创建一个和Pyomo变量维度完全匹配的空二维列表,再逐个填充value(m.x[i,j]),可以这么做:

# 先获取两个维度的大小(假设m.ph和m.n是你的Pyomo Set)
ph_dim = value(m.ph)
n_dim = value(m.n)

# 用列表推导式初始化二维列表,避免浅拷贝
# 这里range的范围和你单索引的逻辑一致,从0到n_dim(包含)
x = [[0 for _ in range(n_dim + 1)] for _ in range(ph_dim + 1)]

# 嵌套循环填充每个元素
for i in range(ph_dim + 1):
    for j in range(n_dim + 1):
        x[i][j] = value(m.x[i,j])

方法2:直接用列表推导式一次性生成

如果你的m.ph和m.n本身就是Pyomo的Set对象,其实可以直接遍历Set来生成列表,不用手动计算维度大小,更简洁也不容易出错:

# 外层遍历i的Set,内层遍历j的Set,直接取值
x = [[value(m.x[i,j]) for j in m.n] for i in m.ph]

这样生成的列表会自动和你Pyomo变量的索引维度完全对应,省去了手动计算维度的步骤。

验证一下

你可以打印一下x的结构,比如print(x),就能看到每个x[i][j]都正确存储了对应Pyomo变量的值,而且维度完全符合你的预期~

内容的提问来源于stack exchange,提问作者Manuel Duran Perez

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 09:28:39