Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ajax/6.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中的嵌套列表:初始化和预期值问题_Python_Python 3.x - Fatal编程技术网

Python中的嵌套列表:初始化和预期值问题

Python中的嵌套列表:初始化和预期值问题,python,python-3.x,Python,Python 3.x,我试图用Python3打印一个简单的2D矩阵,用嵌套列表实现它。所以我需要这样的东西: [ [1, 2, 3], [4, 5, 6], [7, 8, 8] ] 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 然而,由于某些原因,打印输出似乎只显示最后一行 这

我试图用Python3打印一个简单的2D矩阵,用嵌套列表实现它。所以我需要这样的东西:

[ [1, 2, 3],
  [4, 5, 6],
  [7, 8, 8] ]
1       2       3       4       5
6       7       8       9       10
11      12      13      14      15
16      17      18      19      20
然而,由于某些原因,打印输出似乎只显示最后一行

这是我的密码:

# I create a table with 4 rows and 5 columns, all filled by Nones:
table = [[None] * 5] * 4

# Then I initialize it with numbers:
num = 1
for i in range(4):
    for j in range(5):
        table[i][j] = num
        num = num + 1
如果现在我尝试打印表格:

for i in range(4):
    for j in range(5):
        print(table[i][j], end="\t")
    print("")
结果如下:

16      17      18      19      20
16      17      18      19      20
16      17      18      19      20
16      17      18      19      20
然而,我期待着这样的事情:

[ [1, 2, 3],
  [4, 5, 6],
  [7, 8, 8] ]
1       2       3       4       5
6       7       8       9       10
11      12      13      14      15
16      17      18      19      20

我的代码有什么问题?

上述代码的问题是由以下代码行引起的:

table = [[None] * 5]  * 4
事实上,这并没有产生20个不同的“细胞”。相反,它创建了一个包含5个none的列表,然后将同一个列表复制4次

换句话说,如果您尝试执行以下代码:

print(table[0] == table[1])
您将得到一个
True
,因为表中的行实际上是相同的列表

一个简单的解决方案是更改初始化方法,如下所示:

table = [None] * 4

num = 1
for i in range(4):
    table[i] = [None] * 5
    for j in range(5):
        table[i][j] = num
        num = num + 1

通过
is
检查标识,即
表[0]是表[1]
。初始化可以在列表理解中完成:
m,n=4,5;表=[[i*n+j代表范围(n)]中的j代表范围(m)]
。无论如何,使用numpy可能更容易:
table=np.arange(m*n)。重塑(m,n)
。顺便说一下,您发布的代码将引发
TypeError
,因为
None*5
不受支持:
不支持*:'NoneType'和'int'
的操作数类型。您可能是指
表=[[None]*5]*4
是的,修复了!谢谢