创建list二维数组(好坑)python
列表能创建多维数组?
li= [0] * 3
print(li)
#[0, 0, 0]
li_two = [[0] * 3] * 3
print(li_two )
#[[0, 0, 0], [0, 0, 0], [0, 0, 0]]
好像很完美的操作,但是如果进行一些列表赋值,就出现问题了。
li_two = [[0] * 3] * 3
li_two[1][1] = 1
print(li_two)
#[[0, 1, 0], [0, 1, 0], [0, 1, 0]]
原因是浅拷贝,以这种方式创建的列表,li_two 里面的三个列表的内存是指向同一块,修改哪个列表,其他两个列表也会跟着改变。
所以这样风险太大了,调了我几个小时的时间,我真的是醉醉哒,,,
如果要使用列表创建一个二维数组,可以使用生成器来辅助实现。
arr = [[0 for i in range(3)] for j in range(3)]
print(arr)
arr[1][1] = 3
print(arr)
#[[0, 0, 0], [0, 0, 0], [0, 0, 0]]
#[[0, 0, 0], [0, 3, 0], [0, 0, 0]]
还可以使用numpy
import numpy as np
# 创建一维数组
arr= np.array([1, 2, 3])
# 创建二维数组
arr= np.array([[1, 2, 3], [4, 5, 6]])
# 创建一个 3x4 的数组且所有值全为 0
arr1 = np.zeros((3, 4), dtype=int)
arr2 = np.ones((3, 4), dtype=int)
# 创建一个 3x4 的数组,将所有元素的值填充为 2
arr3 = np.full((3, 4), 2, dtype=int)