我怎么能用3创建这个矩阵?

时间:2014-03-03 18:16:45

标签: python list for-loop

我想为参数dem [i] [t] [c]创建一个矩阵,在时间t为节点i中的商品类型c的deman数量

我的代码是:

pdd = 1   # number of node i
r = 2     # number of commodity type c
e = 1     # number of period t
dem = []
dem1 = []
dem2 = []
dem3 = []

for i in range(pdd):
    for c in range(r):    
        for t in range(e):
             dem0 = 1000
             dem1.append (dem0)
        dem2.append (dem1) 
    dem.append(dem2)   

print dem

对于这个例子我想要这个矩阵:[[[1000],[1000]]]
但是python打印这个:[[[1000,1000],[1000,1000]]]

2 个答案:

答案 0 :(得分:1)

您正在引用相同的列表dem1,这意味着当您附加值1000时,它将保留在列表dem1中,将来的附加内容将构建此列表。

试试这个:

pdd = 1   # number of node i
r = 2     # number of commodity type c
e = 1     # number of period t
dem = []
dem2 = []
dem3 = []

for i in range(pdd):
    for c in range(r):    
        dem1 = [] # create a new list
        for t in range(e):
             dem0 = 1000
             dem1.append (dem0)
        dem2.append (dem1) 
    dem.append(dem2)   

print dem

答案 1 :(得分:1)

问题在于,当您将列表添加到另一个列表时,您正在添加一个引用,因此当您稍后更改它时,它会随着它的添加而改变。

在您的情况下,您在开头为dem1,2和3创建一个新列表,然后添加对它们的引用。

在正确的for循环中创建列表:

pdd = 1   # number of node i
r = 2     # number of commodity type c
e = 1     # number of period t
dem = []

for i in range(pdd):
    dem2 = []
    for c in range(r):    
        dem1 = []
        for t in range(e):
            dem0 = 1000
            dem1.append (dem0)
        dem2.append (dem1) 
dem.append(dem2)   

print dem

您还可以将列表理解用作:

dem0 = 1000
dem = [[[dem0 for t in range(e)] for c in range(r)] for i in range(pdd)]
print dem