对于我的研究论文,我使用python来解决优化问题。我参加了关于python基础知识的在线课程,但现在我完全陷入了尝试构建模型的第一部分的困境。
情况:
我有27个可能的场景,每个子列表包含3个具有自己可能结果的周期(0,1或2)。我在python中写了如下:
scenarios=[
[0,0,0],[0,0,1],[0,0,2],[0,1,0],[0,1,1],[0,1,2],[0,2,0],[0,2,1],[0,2,2],
[1,0,0],[1,0,1],[1,0,2],[1,1,0],[1,1,1],[1,1,2],[1,2,0],[1,2,1],[1,2,2],
[2,0,0],[2,0,1],[2,0,2],[2,1,0],[2,1,1],[2,1,2],[2,2,0],[2,2,1],[2,2,2]]
数字0,1和2表示每个时期的需求是低,平均还是高。真实的值在python中列出如下:
minimum=[5,10,0] #0 --5 in period 1, 10 in period 2, 0 in period 3
mean= [10,30,20] #1 --10 in period 1, 30 in period 2, 20 in period 3
maximum=[15,50,40] #2 --15 in period 1, 50 in period 2, 40 in period 3
现在我需要使用方案修改列表或创建一个新的列表,其中列出实际值而不是数字0,1和2.我不知道如何。 所以我想创建一个如下所示的列表:
real=[[5,10,0],[5,10,20]....[15,50,40]]
我能想到的最好的是这个不起作用的版本:
def dpt(): #demand per time period
for s in scenarios:
for t in s:
if t[0]==0:
real=minimum[0]
elif t[0]==1:
real=mean[0]
elif t[0]==2:
real=maximum[0]
elif t[1]==0:
real=minimum[1]
elif t[1]==1:
real=mean[1]
elif t[1]==2:
real=maximum[1]
elif t[2]==0:
real=minimum[2]
elif t[2]==1:
real=mean[2]
else: #t[2]==2
real=maximum[2]
return real
循环已经存在的第一个问题是:
if t[0]==0:
TypeError: 'int' object has no attribute '__getitem__'
如何解决这个问题?非常感谢您的帮助。
答案 0 :(得分:0)
解决方案很简单:
for s in scenarios:
s[0]= minimum[s[0]] # this will replace the value of s[0],if s[0] is 0,s[0] will be replaced of minimum[0]
s[1]= mean[s[1]]
s[2]= maximum[s[2]]
这就是全部,如果您对python有更多了解,代码甚至可以更简单。
答案 1 :(得分:0)
通常,当您遇到TypeError时,检查错误的最简单方法是查看变量内部的内容。试试这个:
scenarios=[
[0,0,0],[0,0,1],[0,0,2],[0,1,0],[0,1,1],[0,1,2],[0,2,0],[0,2,1],[0,2,2],
[1,0,0],[1,0,1],[1,0,2],[1,1,0],[1,1,1],[1,1,2],[1,2,0],[1,2,1],[1,2,2],
[2,0,0],[2,0,1],[2,0,2],[2,1,0],[2,1,1],[2,1,2],[2,2,0],[2,2,1],[2,2,2]]
for s in scenarios:
for t in s:
print t
这将导致:
0
0
0
0
0
1
0
0
2
...
这就是你得到错误的原因。没有t[0]
因为t
只是一个int。
如果您需要进一步的帮助,请尝试使用通用术语提出更具体的问题(要求和期间可能会让不熟悉您的论文的人感到困惑。)
祝你好运!