将三维数组更改为包含Python/Palm中列表的二维数组
我正在使用Solverstudio(与纸浆解算器一起使用),并尝试从已找到的3D变量中获取该变量特定值的2D输出(到电子表格) 我试过:将三维数组更改为包含Python/Palm中列表的二维数组,python,arrays,list,Python,Arrays,List,我正在使用Solverstudio(与纸浆解算器一起使用),并尝试从已找到的3D变量中获取该变量特定值的2D输出(到电子表格) 我试过: for (m,c,t) in mct: if Ymct[m][c][t].varValue>0: Schedule[m,t]=[c] 但由于某些m,t组合的c值超过1,所以它不起作用。我想列出m,t组合的所有c值 请帮忙 使用collections.defaultdict作为Schedule,您只需通过以下方式将
for (m,c,t) in mct:
if Ymct[m][c][t].varValue>0:
Schedule[m,t]=[c]
但由于某些m,t组合的c值超过1,所以它不起作用。我想列出m,t组合的所有c值
请帮忙 使用
collections.defaultdict
作为Schedule
,您只需通过以下方式将c
s添加到列表中:
from collections import defaultdict
schedule = defaultdict(list)
for (m,c,t) in mct:
if Ymct[m][c][t].varValue>0:
schedule[(m,t)].extend([c])
(顺便说一句,您应该根据正确地命名变量。具体来说,对于变量名和函数名,请使用存储下的,对于类名,请使用CapWords
)
更新:
将一个代码> Debug Tux< /Cuff>写入CSV,可以考虑以下方法:导入CSV
from collections import defaultdict
schedule = defaultdict(list)
schedule[1, 1] = [2, 3, 4]
schedule[1, 2] = [3, 4, 5]
schedule[1, 3] = [4, 5, 6]
schedule[1, 4] = [5, 6, 7]
with open("data.csv", "wb") as f:
csv.writer(f).writerows([k, ] + v for k, v in schedule.iteritems())
或者,我想知道LpVariable.varValue
是否可以返回列表。如果是这样的话,下面的改变应该会起作用:
#schedule=defaultdict(list)
schedule = LpVariable.dicts("schedule", (moderator, time))
# ... many lines ...
for (m,c,t) in mct:
if Ymct[m][c][t].varValue>0:
#schedule[(m,t)].extend([c])
schedule.setdefault(m, {}).setdefault(t, []).append(c)
# List entries in model output area
for (m,t) in mt:
if len(schedule[(m,t)])>0:
print (m,t), schedule[m][t]
#print (m,t), schedule[(m,t)]
# ... many lines ...
for (m,t) in mt:
timetable[m,t]=schedule[m][t].varValue
#timetable[m,t]=schedule[m,t].items()
您可以在此处阅读更改后的代码:非常感谢您的回答(以及建议)。我是python新手,因为这一次我只是用它在excel中解线性模型(使用solverstudio,但使用ironpython解算器)。我现在使用:from collections import defaultdict schedule=defaultdict(list)for(m,c,t)in mct:if Ymct[m][c][t].varValue>0:schedule[(m,t)].extend([c])for(m,t)in mt:if len(schedule[(m,t)]>0:print(m,t),schedule[(m,t)]我不确定我是否做错了什么,但它仍然不允许我将列表添加到工作簿中的单元格中(当我使用此代码时,它没有添加)。我在电子表格的某个范围上定义了计划[(m,t)],但没有任何更改。我甚至不确定solverstudio(带纸浆)是否允许单元格中的列表:S我至少可以使用“打印”在模型输出部分获得答案如果你对我可能做错了什么有任何其他想法,请告诉我know@MarilizevanBuisbergen如果没有在解算器中如何使用计划
的代码,我恐怕无法说明为什么它不允许您将列表添加到单元格中。除了在末尾之外,它不会在任何地方使用-它是一个在模型的数据中定义的空表(使用solverstudio中的“添加数据”选项),具有索引行(m)和列(c)。它唯一的功能是在找到解决方案后填写。@MarilizevanBuisbergen我不确定我是否完全理解。但我发布的代码不再是原始代码中的计划
;它基本上声明了一个新变量计划
,并仅修改此计划
变量。它被填充如果您以后不使用它,则无法用存储在计划中的数据填充单元格。