Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 我如何用3创建此矩阵?_Python_List_For Loop - Fatal编程技术网

Python 我如何用3创建此矩阵?

Python 我如何用3创建此矩阵?,python,list,for-loop,Python,List,For Loop,我想为参数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

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

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

在那里创建列表只允许
dem1
有1个元素,每次进入
for
循环时都会覆盖它。因此,如果
e
>1
,则不会work@RubenBermudez我不确定这是否是op的意图,但我编辑了列表,使其大于len 1