Python 矩阵中元素的返回索引

Python 矩阵中元素的返回索引,python,for-loop,matrix,Python,For Loop,Matrix,如何求矩阵中给定元素的i,j指数 #list of pairs(i, j) coordinates = [] # find given number i for ri, row in enumerate(matrix): for ei, elem in enumerate(matrix): # if i is found # then # add its index to list if i == matrix[ri][

如何求矩阵中给定元素的i,j指数

#list of pairs(i, j)
coordinates = []

# find given number i
for ri, row in enumerate(matrix):
    for ei, elem in enumerate(matrix):

        # if i is found
        # then
        # add its index to list
        if i == matrix[ri][ei]:
            coordinates.append(ri, ei)

您可以通过添加
中断
继续
来实现这一点;其他

for i in list:
    for ri, row in enumerate(matrix):
        for ei, elem in enumerate(matrix):
            #breaks out of the loop if condition is met
            if i == matrix[ri][ei]:
                coordinates.append((ri, ei))
                break 
        #if no breaks occur, continue iterating over rows
        else:
            continue
        # breaks out of the loop if first occurrence found
        break 

有两种解决方案:

  • 在@Vilius Klakauskas中使用两个
    break
    关键字。您可以阅读有关将
    else
    for
    break
    语句一起使用的更多信息
  • 使用
    返回声明函数,如下所示:
  • 并在循环中调用它:

    coordinates = []
    for i in list: 
        coordinates.append(find(i))
    
    坐标
    输出:

    [(0,1)、(0,2)、(1,0)]

    首先,带有2个参数的
    .append()
    将无法工作。您可能想附加一个元组或列表,由
    ri
    ei
    组成

    另外,请不要对变量使用内置名称,如
    list
    ,这会让每个人都感到困惑,包括解释器

    至于以有效的方式解决问题,最好不要在外部循环中而是在最内部循环中迭代
    列表
    (此处为
    ),以避免多次无意义地检查相同的矩阵坐标,如下所示:

    value\u seekend=[1,2,3]
    矩阵=[[0,1,2],[3,2,0],[1,2,3]]
    坐标=[]
    对于行索引,枚举(矩阵)中的行:
    如果不是所寻求的值:中断
    对于列索引,枚举(行)中存在值:
    如果不是所寻求的值:中断
    对于查找的值索引,枚举中查找的值(查找的值):
    如果值_present==寻求的值_:
    坐标.append((行索引、列索引))
    搜索值.pop(搜索值索引)
    打破
    

    被找到后,值将从
    Values\u seekend
    中删除,因此,如果以后还需要这些值,您可能需要为此目的创建一个临时列表。

    有一个类似的问题被问到:感谢您对我的问题的反馈。我尽量避免违反社区指导原则。这是如何发生的,在第三个循环中,寻找的索引值没有超出范围?为什么在IF语句中使用break,而在函数找到矩阵中的第一个数字后,IF break现在会中断循环?这是我的误解,但你能解释一下吗?
    中断
    只会中断所寻找的
    值的循环
    ,以便检查下一个坐标。多亏了这一点,在迭代过程中更改列表的长度没有问题——每个坐标都有一个新的循环。Aaa,好的,谢谢你的广泛解释,现在它有意义了:)
    coordinates = []
    for i in list: 
        coordinates.append(find(i))