Python中初始化一个二维数组及注意事项说明
作者:cccxxxqq
这篇文章主要介绍了Python中初始化一个二维数组及注意事项说明,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
Python初始化一个二维数组及注意事项
Python在初始化二维数组的时候还是有一些坑的,主要是要避免可变元素的传递改变问题:
array = [0, 0, 0] matrix = [array] * 3 matrix[0][0] = 1 print(matrix) >>>[[1, 0, 0], [1, 0, 0], [1, 0, 0]]
如果用上面这种方式初始化数组,实际上并不是创建了一个新的二维数组,而是创建了三个指向array的引用。
因此,如果改变array的话,这三个就会同步随之改变。
那么如何正确初始化一个二维数组呢?
方法一:
matrix = [[0, 0, 0], [0, 0, 0], [0, 0, 0]] matrix[0][0] = 1 print(matrix) >>>[[1, 0, 0], [0, 0, 0], [0, 0, 0]]
方法二:(列表推导式)
matrix = [[0 for i in range(3)] for i in range(3)] matrix[0][0] = 1 print(matrix) >>>[[1, 0, 0], [0, 0, 0], [0, 0, 0]]
Python二维数组初始化: [[0]*n]*n 与 [[0]*n for i in range(n)]
做题的时候因为初始化成[[0]*n]*n卡了好久,后来才知道这两种方法初始化出来的数组不一样。
用第一种方式初始化,其实是将【0】*n这个列表的索引复制了n遍,改变其中一个,其它的也会跟着改变。
而第二种是通过for i in range(n)推导出的真实二维列表。
注意:
推荐使用全部用循环或者组合的方式(里面是×,外面循环)的方式。如果都为乘的方式是浅复制,每一行的改变都会改变其他行。
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。