1
votes

Comment puis-je obtenir l'indice d'un élément d'une diagonale dans une matrice?

Pour expliquer davantage, je vais donner un exemple. J'ai une grille 8x8 composée de nombres aléatoires,

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()

J'ai écrit du code qui me donne la liste de la diagonale étant donné une valeur x et y. Par exemple, si un x de 2 et un y de 3 sont donnés, la diagonale [2,5,8,5,9,8,3] sera renvoyée. Voici le code:

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]]

Ma question est, comment pourrais-je obtenir l'index de l'élément donné dans la liste diagonale. Dans l'exemple, les coordonnées sont x = 2 et y = 3 (qui est le nombre 8), et la diagonale résultante est [2,5,8 , 5,9,8,3] , donc l'index de l'élément est 2. Je ne peux pas non plus utiliser numpy fyi.


0 commentaires

3 Réponses :


0
votes

Vous pouvez récupérer l'index d'un élément dans une liste en utilisant list.index (element) . Par exemple:

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

J'espère que cela vous aidera. Bonne chance!


0 commentaires

1
votes

Premièrement, le cas où x

idx = min(x,y)

Cela se simplifie en idx = x, et par symétrie

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


1 commentaires

Hou la la! Je ne pensais pas que ce serait aussi simple, merci



0
votes

Je vous suggère de changer votre fonction (ou de faire une variante) pour renvoyer un tuple avec les coordonnées et les nombres au lieu de seulement les nombres (semblable à ce que fait enumerate (). Il sera plus facile de mapper ceci aux nombres et trouver coordonnées des nombres par la suite

En d'autres termes, si vous:

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

vous pourrez obtenir uniquement les nombres avec:

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


0 commentaires