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.
3 Réponses :
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!
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
Hou la la! Je ne pensais pas que ce serait aussi simple, merci
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])