我想为参数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]]]
答案 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