Skip to main content
 首页 » 编程设计

python之试图理解嵌套循环、单位矩阵

2025年05月04日9shanyou

所以我被嵌套循环困住了,我觉得我大概有一半时间理解它们,然后我开始处理不同的问题,然后我就不再理解它们了。也许我把事情复杂化了。无论如何回到我的问题,我有一个单位矩阵

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 ' 发现任何错误。

让我知道你的进步,我可以给你更多的提示..