初始化二维数组方法
下面均以数组最里层数据类型为str为例,其余数据类型同理。
1. 利用list初始化一维数组
# 长度为5,存储数据为5个空字符串
array_1: list[str] = [''] * 5
# 长度为5,声明存储数据类型为str
array_1: list[type(str)] = [str] * 5
# 索引访问方法
array_1[i]
① 显式声明
list[str]、list[type(str)]
都是可以省略的,之后初始化二维数组同理。②
[str] * 5
是为不赋初值的写法,与[''] * 5
的区别在于存储数据类型不同,在某些场景可能报错或警告,比如在调用splitlines()时会警告,因为类型不匹配,但不影响使用。解决方式为使用具体实例初始化,比如字符串就用 ‘’、'0’等,int就用0、1、2等等。一个不行就换另一个,后面多维同理。
2. 利用list初始化二维数组
# 一个5*6的二维数组,存储数据为30个空字符串
array_2: list[list[str]] = [['' for col in range(5)] for row in range(6)]
# 一个5*6的二维数组,声明存储数据类型为str
array_2: list[type(list[str])] = [[str for col in range(5)] for row in range(6)]
# 索引访问方法
array_2[i][j]
① 同一维数组,既可使用实例初始化,也可只指明数据类型。多维同理,多层嵌套即可。
② 需要注意的是列表初始化多维数组不能使用
[[''] * 5] * 6
形式,这样的操作只是对索引的拷贝,即把一个一维数组复制了五份,即列表的浅拷贝,并未得到一个真正意义上的二维数组。该方法可以在numpy中使用。
3. 利用numpy初始化二维数组
# 一个5*6的二维列表,存储数据为30个空字符串
array_3: np.ndarray = np.array([[''] * 5] * 6)
# 一个5*6的二维列表,声明存储数据类型为str
array_3: np.ndarray = np.array([[str] * 5] * 6)
# 索引访问方法
array_3[i, j]
利用numpy就可以直接采用2-②中提到的方法了。多维直接嵌套即可。
附一下上述代码输出结果:
print(f"一维数组array_1为:\n{array_1}\n"
f"二维数组array_2为:\n{array_2}\n"
f"二维数组array_3为:\n{array_3}")