can';t在python中正确修改全局二维矩阵
我在尝试一个程序,在该程序中,我用python全局声明了一个名为can';t在python中正确修改全局二维矩阵,python,python-3.x,Python,Python 3.x,我在尝试一个程序,在该程序中,我用python全局声明了一个名为grid的2D数组,大小为5 x 5 grid = [[0] * 5] * 5 def main(): global grid n,m = map(int,input().split()) for i in range(n): li = list(map(int,input().split())) for j in range(m): if j <
grid
的2D数组,大小为5 x 5
grid = [[0] * 5] * 5
def main():
global grid
n,m = map(int,input().split())
for i in range(n):
li = list(map(int,input().split()))
for j in range(m):
if j < 5:
grid[i][j] = li[j]
print(grid)
if __name__ == "__main__":
main()
2行3列(n
和m
)
它给出以下输出:-
[[4, 5, 6, 0, 0], [4, 5, 6, 0, 0], [4, 5, 6, 0, 0], [4, 5, 6, 0, 0], [4, 5, 6, 0, 0]]
即使从main
函数中删除行global grid
,输出仍保持不变。发生了什么事?我希望它根据输入更新网格,并保留多余的单元格不变,即值0
。如果输入的大小为2 x 3,则仅应根据输入修改网格的前2行和3列,其余元素应保持0
,您应使用:
[[0]*5 for _ in range(5)]
而不是:
[[0] * 5] * 5
有关更多信息,请检查此项。有没有比此更快的方法?我在1D列表中使用了这个方法,因为它比列表理解速度快,而且效果总是很好。我认为这是最快的方法。。。检查
[[0] * 5] * 5