Python 在一行代码中设置整列的值
我在做一个问题“给定一个矩阵,大小为M x N,大小为0s和1s。如果一个元素为0,则将其整行和整列设置为0”。因此,我被困在如何更改包含值0的整个列的值上Python 在一行代码中设置整列的值,python,for-loop,matrix,Python,For Loop,Matrix,我在做一个问题“给定一个矩阵,大小为M x N,大小为0s和1s。如果一个元素为0,则将其整行和整列设置为0”。因此,我被困在如何更改包含值0的整个列的值上 def setZeroes(self, A): r=len(A) c=len(A[0]) for i in range(r): for j in range(c): if (A[i][j]==0):
def setZeroes(self, A):
r=len(A)
c=len(A[0])
for i in range(r):
for j in range(c):
if (A[i][j]==0):
A[i]=[0 for j in range(c)]
A[0:r][j]=[0][j]
我知道这是一个糟糕的实现,但我只想知道如何将矩阵的整列值设置为零。如果使用普通列表,则必须使用
进行循环:
for y in range(r):
A[y][j] = 0
和为行编写代码的类似方法
for x in range(c):
A[i][x] = 0
所以你需要
if A[i][j] == 0:
for y in range(r):
A[y][j] = 0
for x in range(c):
A[i][x] = 0
但我发现你的代码还有其他问题。在更改值的同一数组中检查零,因此在更改行/列中的值后,将有新的零,这些零将生成新的更改
比如说
[
[1, 2, 3],
[4, 0, 6],
[7, 8, 9]
]
我希望中间行和中间列中只有零
[
[1, 0, 3],
[0, 0, 0],
[7, 0, 8]
]
但它创造了
[
[1, 0, 0],
[0, 0, 0],
[0, 0, 0]
]
因为在中间行和中间列中放入零后,它将使用这些零在下一行和下一列中生成新的零
您必须复制原始数组并检查复制数组中的零,但更改原始数组中的值
import copy
def setZeroes(A):
temp = copy.deepcopy(A)
r = len(A)
c = len(A[0])
for i in range(r):
for j in range(c):
if temp[i][j] == 0:
#A[i] = [0 for j in range(c)]
for x in range(c):
A[i][x] = 0
for y in range(r):
A[y][j] = 0
a = [
[1, 2, 3],
[4, 0, 6],
[7, 8, 9]
]
print(a)
setZeroes(a)
print(a)
或者,您应该首先找到数组中的所有零,然后更改数组中的值
def setZeroes(A):
r = len(A)
c = len(A[0])
pos = []
# find all zeros
for i in range(r):
for j in range(c):
if A[i][j] == 0:
pos.append( (i,j) )
# change it
for i, j in pos:
for x in range(c):
A[i][x] = 0
for y in range(r):
A[y][j] = 0
a = [
[1, 2, 3],
[4, 0, 6],
[7, 8, 9]
]
print(a)
setZeroes2(a)
print(a)
我正在努力寻找一个实际的应用程序。您能举个例子吗?您可以对矩阵使用numpy.ndarray
,然后进行转置,将一行设置为“0”,然后重新转置。但是@Michael link更好。如果您使用普通列表,那么您将不得不对范围(r)中的y使用-循环::A[y][j]=0
BTW:以类似的方式,您可以为范围(c)中的x编写行-:A[i][x]=0