如何根据python中的位置替换嵌套列表中的值?

时间:2017-04-25 09:00:06

标签: python for-loop replace nested

对于我的研究论文,我使用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__'

如何解决这个问题?非常感谢您的帮助。

2 个答案:

答案 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。

如果您需要进一步的帮助,请尝试使用通用术语提出更具体的问题(要求期间可能会让不熟悉您的论文的人感到困惑。)

祝你好运!