Как я могу получить индекс элемента диагонали в матрице? - PullRequest
0 голосов
/ 03 марта 2019

Для дальнейшего объяснения приведу пример.У меня есть сетка 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 и ay 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=2 и y=3 (это число 8), а результирующая диагональ - [2,5,8,5,9,8,3], поэтому индекс элемента равен 2. Также я не могу использовать numpy fyi.

Ответы [ 3 ]

0 голосов
/ 03 марта 2019

Во-первых, случай, когда x

if x<y:
   row = y-x
   idx = y-row

Это упрощает до idx = x, а по симметрии

idx = min(x,y)
0 голосов
/ 03 марта 2019

Я бы предложил вам изменить свою функцию (или сделать вариант), чтобы он возвращал кортеж с координатами и числами, а не только с числами (аналогично тому, что делает enumerate (). Будет проще сопоставить это с числами и найтикоординаты чисел после

Другими словами, если вы:

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

, вы сможете получить только числа с:

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

, но вы такжеуметь манипулировать координатами, когда вам нужно

0 голосов
/ 03 марта 2019

Вы можете получить индекс элемента в списке, используя list.index(element).Например:

diagonal = [2,5,8,5,9,8,3]
theIndex = diagonal.index(8)
print(theIndex)

Надеюсь, это поможет.Удачи!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...