Bienvenue sur IndexError.

Ici vous pouvez poser des questions sur Python et le Framework Django.

Mais aussi sur les technos front comme React, Angular, Typescript et Javascript en général.

Consultez la FAQ pour améliorer vos chances d'avoir des réponses à vos questions.

Parcourir un tableau en diagonale

0 votes

Je souhaite parcourir un tableau par les diagonales et non par les lignes et les colonnes. Par exemple, le code qui suit utilise les lignes et les colonnes :

for i in range(3):
    for j in range(3):
        print(i, j, sep=",", end=" / ")

Et il donne ceci :

0,0 / 0,1 / 0,2 / 1,0 / 1,1 / 1,2 / 2,0 / 2,1 / 2,2 /

Je voudrais un programme qui donne ceci :

0,0 / 1,0 / 0,1 / 2,0 / 1,1 / 0,2 / 2,1 / 1,2 / 2,2 /

Le parcours se ferait par couche, en testant d'abord les positions proches de 0.

J'ai une grosse quantité de données à parcourir, sur trois dimensions. Voire cinq… Je sais déjà que les solutions intéressantes sont proches de l'origine. J'arrive à le faire pour deux dimensions, mais j'ai du mal pour plus de dimensions. Il faudrait aussi les dimensions puissent être de tailles différentes :

def loopDiag(taille):
    for diag in range(taille+1):
        for i in range(1+diag):
            x, y = diag-i, i
            yield x, y
    for diag2 in range(1,taille+1):
        diag = taille-diag2
        for i in range(1+diag):
            x, y = diag-i, i
            x, y = taille-x, taille-y
            yield x, y

print(list(loopDiag(5)))

[(0, 0), (1, 0), (0, 1), (2, 0), (1, 1), (0, 2),
(3, 0), (2, 1), (1, 2), (0, 3), (4, 0), (3, 1),
(2, 2), (1, 3), (0, 4), (5, 0), (4, 1), (3, 2),
(2, 3), (1, 4), (0, 5), (1, 5), (2, 4), (3, 3),
(4, 2), (5, 1), (2, 5), (3, 4), (4, 3), (5, 2),
(3, 5), (4, 4), (5, 3), (4, 5), (5, 4), (5, 5)]

demandé 7-Aou par Sbgodin (108 points)

1 Réponse

0 votes

Le code suivant :

nbL, nbC = 3, 4 # nb de Lignes et nombre de Colonnes
idx = [(i, k-i) for k in range(nbL+nbC) for i in range(k, -1, -1) if i < nbL and k-i < nbC]

print(idx)

produit la liste d'indices idx :
[(0, 0), (1, 0), (0, 1), (2, 0), (1, 1), (0, 2), (2, 1), (1, 2), (0, 3), (2, 2), (1, 3), (2, 3)]

Dans le cas de la dimension 2 les indices i et k-i sont tels que leur somme vaut k que l'on fait varier de 0 à nbL+nbC. Pour chaque valeur de k, les couples d'indices correspondants sont donc les points (pas tous...) à coordonnées entières de la droite d'équation x+y = k...
Tout cela pour suggérer une piste dans le cas de la dimension 3 où l'on peut envisager de produire les coordonnées entières des points (pas tous...) des plans d'équation x+y+z = k

répondu 25-Nov par anonyme
...