普通方法:
最简单易懂的方法,这种逻辑不仅适用于 python,也适用于任何变成语言。
row = 5
col = 8
matrix = []
for i in range(row):
m = []
for j in range(col):
m.append(False)
matrix.append(m)
# 矩阵打印函数
def showMatrix():
for i in range(row):
for j in range(col):
print(matrix[i][j], end="\t")
print()
showMatrix()
print("更改 matrix[1][1] 的值为 True ")
matrix[1][1] = True
showMatrix()
False False False False False False False False
False False False False False False False False
False False False False False False False False
False False False False False False False False
False False False False False False False False
更改 matrix[1][1] 的值为 True
False False False False False False False False
False True False False False False False False
False False False False False False False False
False False False False False False False False
False False False False False False False False
简洁方法
列表解析是python的一大特点,它能够是代码更加简洁易懂。
row = 5
col = 8
matrix = [[False] * col for i in range(row)]
# 矩阵打印函数
def showMatrix():
for i in range(row):
for j in range(col):
print(matrix[i][j], end="\t")
print()
showMatrix()
print("更改 matrix[1][1] 的值为 True ")
matrix[1][1] = True
showMatrix()
False False False False False False False False
False False False False False False False False
False False False False False False False False
False False False False False False False False
False False False False False False False False
更改 matrix[1][1] 的值为 True
False False False False False False False False
False True False False False False False False
False False False False False False False False
False False False False False False False False
False False False False False False False False
错误的方法
row = 5
col = 8
matrix = [[False] * col] * row
# 矩阵打印函数
def showMatrix():
for i in range(row):
for j in range(col):
print(matrix[i][j], end="\t")
print()
showMatrix()
print("更改 matrix[1][1] 的值为 True ")
matrix[1][1] = True
showMatrix()
可以看到,如果不使用列表解析,改变一行的任意一列,那么每一行的该列都会改变。
False False False False False False False False
False False False False False False False False
False False False False False False False False
False False False False False False False False
False False False False False False False False
更改 matrix[1][1] 的值为 True
False True False False False False False False
False True False False False False False False
False True False False False False False False
False True False False False False False False
False True False False False False False False
什么原因呢?
我们打出每一行列表的地址
def showMatrix():
for i in range(row):
print(id(matrix[i]))
showMatrix()
会发现每一行列表的地址都是一样的。说明他们都指向同一个内存地址,所以如果该地址的内容发生改变,那么所有指向该地址的列表都会发生改变。
51683496
51683496
51683496
51683496
51683496
如果我们使用列表解析
row = 5
col = 8
matrix = [[False] * col for i in range(row)]
那么每一行列表就相当于独立保存的
51488776
51486920
51486760
51486792
51486824
我们在生成矩阵的时候,一定要用列表解析的方式生成矩阵。
高级方法
使用numpy包可以直接生成举矩阵
import numpy as np
matrix = np.full(shape=(5, 8), fill_value=False)
print(matrix)
print("更改 matrix[1][1] 的值为 True ")
matrix[1][1] = True
print(matrix)
[[False False False False False False False False]
[False False False False False False False False]
[False False False False False False False False]
[False False False False False False False False]
[False False False False False False False False]]
更改 matrix[1][1] 的值为 True
[[False False False False False False False False]
[False True False False False False False False]
[False False False False False False False False]
[False False False False False False False False]
[False False False False False False False False]]