所以我被嵌套循环困住了,我觉得我大概有一半时间理解它们,然后我开始处理不同的问题,然后我就不再理解它们了。也许我把事情复杂化了。无论如何回到我的问题,我有一个单位矩阵
lst = [[1,0,0], [0,1,0], [0,0,1]]
我正在尝试编写一个程序来检查它是否是一个单位矩阵,所以我知道 i 和 j 所在的索引具有相同的索引(即 i 在位置 0 和 j 在位置 0;我在位置 1 和 j 在位置 1;i 在位置 2 和 j 在位置 2) 并且等于 1 那么矩阵是单位矩阵。现在我的问题是我觉得我很难把它表达给电脑。或者换句话说,lst[0][0]、lst[1][1] 和 lst[2][2] 都应该等于 1,所有其他值都应该等于 0。在不给我答案的情况下,有人可以将我推向正确的方向吗?我已经尝试解决这个问题大约 2 周了,现在我感到很沮丧,因为我做不到,因为它看起来很简单......
谢谢。
def identity(lst):
for i in lst:
for j in i:
if i == j and lst[i][j] == 1:
if i != j and lst[i][j] == 0:
return True
return False
我哪里出错了?
我想我明白了!
def identity(lst):
size = len(lst)
for i in range(len(lst)):
if len(lst[i]) != size:
return False
for j in range(len(lst)):
if i == j and lst[i][j] != 1:
return False
elif i != j and lst[i][j] != 0:
return False
return True
打印 i 和 j:
for i in range(len(lst)):
for j in range(len(lst)):
print("i:", i, "j:", j)
结果:
i: 0 j: 0
i: 0 j: 1
i: 0 j: 2
i: 1 j: 0
i: 1 j: 1
i: 1 j: 2
i: 2 j: 0
i: 2 j: 1
i: 2 j: 2
这对我帮助很大!
请您参考如下方法:
首先,您的缩进似乎损坏了。你应该始终正确缩进,尤其是在 python 中。应该是:
def identity(lst):
for i in lst:
for j in i:
if i == j and lst[i][j] == 1:
if i != j and lst[i][j] == 0:
return True
return False
其次,您没有按照您认为的方式访问元素。如果我继续在你的循环中打印:
for i in lst:
for j in i:
print "i:", i, "j:", j
print
我得到:
i: [1, 0, 0] j: 1
i: [1, 0, 0] j: 0
i: [1, 0, 0] j: 0
i: [0, 1, 0] j: 0
i: [0, 1, 0] j: 1
i: [0, 1, 0] j: 0
i: [0, 0, 1] j: 0
i: [0, 0, 1] j: 0
i: [0, 0, 1] j: 1
您可以使用 range 的组合(或 xrange )和 len如果您需要迭代矩阵的索引,则函数。
最后,你的条件语句这样没有意义
if i == j and lst[i][j] == 1:
if i != j and lst[i][j] == 0: # you never reach below here
return True # because i == j is always true in here
# provided by the first conditional
您需要将这些条件分开。即使您这样做,您也会得到错误的答案,因为它会 返回 True,即使只有一个元素满足条件(即只有一个元素位于正确的位置)。我相信你需要以相反的方式思考,return False in conditionals (ofc don't forget to change them respectively) and return True in the end if you don't ' 发现任何错误。
让我知道你的进步,我可以给你更多的提示..
