我怎样才能用3来创建这个矩阵呢?

2024-05-23 22:24:24 发布

您现在位置:Python中文网/ 问答频道 /正文

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

我的代码是:

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]]


Tags: ofinnumberfor参数节点时间range
2条回答

您引用的是同一个列表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

问题是,当您将一个列表添加到另一个列表时,您正在添加一个引用,因此当您稍后更改它时,它会在添加到的任何地方更改

在本例中,首先为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

相关问题 更多 >