练习2:矩阵0变换
题目要求
给一个m*n的矩阵,如果有一个元素为0,则把该元素对应的行与列所有元素全部变为0。
分析
- 信息提取:遍历整个矩阵,记录下0元素的位置信息
- 变换操作:再次遍历,用0元素的位置信息来变换该矩阵
- 注意,防止原数据的信息提取与变换操作杂糅在一起
- 一个值得注意的点是以何种形式记录下0元素的位置信息,可以以0/1序列形式(官方代码)也可以直接记录下标(我的代码)
代码1——官方的
def zero(matrix):
m = [None] * len(matrix)
n = [None] * len(matrix[0])
for i in range(len(matrix)):
for j in range(len(matrix[0])):
if (matrix[i][j] == 0):
m[i] = 1
n[j] = 1
for i in range(len(matrix)):
for j in range(len(matrix[0])):
if (m[i] == 1 or n[j] == 1):
matrix[i][j] = 0
#%%
matrix = [ [ 1, 1, 1, 1, 1, 0, 1, 1, 1, 1 ],
[ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ],
[ 1, 1, 0, 1, 1, 1, 1, 1, 1, 1 ],
[ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ],
[ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ] ]
#%%
for x in matrix:
print(x, sep=" ")
#%%
zero(matrix)
for x in matrix:
print(x, sep=" ")
代码2——我的
def zero(matrix):
z = []
m = len(matrix)
n = len(matrix[0])
for i in range(m):
for j in range(n):
if matrix[i][j] == 0:
z.append((i, j))
for i in range(len(z)):
p, q = z[i]
matrix[p] = [0 for i in range(n)]
for j in range(m):
matrix[j][q] = 0
Tips
- 对二维list的某一行赋值和某一列赋值用的是不一样的操作
- 用len提取list的行列数
网友评论