如何获得矩阵中对角线元素的索引?

时间:2019-03-03 04:01:20

标签: python list matrix indexing grid

为进一步解释,我将举一个例子。我有一个由随机数组成的8x8网格,

m = [
[1 ,5, 2, 8, 6, 9, 6, 8]
[2, 2, 2, 2, 8, 2, 2, 1]
[9, 5, 9, 6, 8, 2, 7, 2]
[2, 8, 8 ,6 ,4 ,1 ,8 ,1]
[2, 5, 5, 5, 4, 4, 7, 9]
[3, 9, 8, 8, 9, 4, 1, 1]
[8, 9, 2, 4, 2, 8, 4, 3]
[4, 4, 7, 8, 7, 5, 3, 6]]

我编写了代码,给出了给定x和y值的对角线列表。例如,如果给定x为2且y为3,则将返回对角线[2,5,8,5,9,8,3]。这是代码:

def main():
    m = [[1 ,5, 2, 8, 6, 9, 6, 8],[2, 2, 2, 2, 8, 2, 2, 1],[9, 5, 9, 6, 8, 2, 7, 2],[2, 8, 8 ,6 ,4 ,1 ,8 ,1],[2, 5, 5, 5, 4, 4, 7, 9],[3, 9, 8, 8, 9, 4, 1, 1],[8, 9, 2, 4, 2, 8, 4, 3],[4, 4, 7, 8, 7, 5, 3, 6]]
    x = 2
    y = 3
    for i in m:
        print(i)
    print(diagonal(m,x,y))


def diagonal(m, x, y):
    #x
    row = max((y - x, 0))
    #y
    col = max((x - y, 0))
    while row < len(m) and col < len(m[row]):
        yield m[row][col]
        row += 1
        col += 1
main()

我的问题是,如何获取对角线列表中给定元素的索引。在示例中,坐标为x=2y=3(即数字8),结果对角线为[2,5,8,5,9,8,3],因此元素的索引为2。我也不能使用麻木菲。

3 个答案:

答案 0 :(得分:0)

您可以使用def subSum(numbers,total,length): if len(numbers) < length or length < 1: return [] for index,number in enumerate(numbers): if length == 1 and number == total: return [number] subset = subSum(numbers[index+1:],total-number,length-1) if subset: return [number] + subset return [] 来获取列表中元素的索引。 例如:

list.index(element)

我希望这会有所帮助。祝你好运!

答案 1 :(得分:0)

首先,x的情况

RewriteCond %{QUERY_STRING} ^$

这通过对称性简化为idx = x

/sports/2018-19? query staring

答案 2 :(得分:0)

我建议您更改函数(或进行变体)以返回带有坐标和数字的元组,而不是仅返回数字(类似于enumerate()所做的事情。将其映射到数字并查找会更容易)之后的数字坐标

换句话说,如果您:

yield (row,col,m[row][col])

您将可以使用来获取数字:

numbers = [ num for row,col,num in diagonal(m,2,3) ]

但是您也可以在需要时操纵坐标