全局变量未更新

时间:2018-04-05 19:05:44

标签: python

我有一个10 * 22矩阵,我将其存储为二维点列表。

初始矩阵(左)必须转换为右边的矩阵,逻辑是如果一行没有点,则必须将其转换为所有点的一个。

enter image description here enter image description here

但由于某种原因,当我调用函数步骤时,我的矩阵不会更新。但是当我打印 矩阵 时,它会让我恢复原来未改动的。

以下是我的代码:

WIDTH, HEIGHT =10, 22
matrix=[['.' for x in range(WIDTH)] for y in range(HEIGHT)]
'''
somewhere in between I am changing the matrix, and the result gets 
successfully stored in 'matrix'
'''

def step():
     global matrix                                                                                                                     
     for row in matrix:
         if row.count('.')==0:
             row = ['.' for elem in row]

1 个答案:

答案 0 :(得分:1)

问题不是全局变量,而是在循环中重新分配row名称:

row = ['.' for elem in row]

创建row引用,matrix未知。

你可以改善&例如,通过使用切片分配进行修复更高效的代码:

 for row in matrix:
     if not '.' in row: # no need to count, just check if a dot is there
         row[:] = ['.'] * len(row)

这有效但创造了&复制了大量数据。列表理解而不是循环可能会更好:

matrix = [row if '.' in row else ['.'] * len(row) for row in matrix]

(它起作用,因为matrix是全局的)。此外,matrix init可以简化为:

matrix=[['.']*WIDTH for _ in range(HEIGHT)]

由于字符串是不可变的,你可以使用乘法来创建行(但不能用于外部循环!)