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)

Votre réponse

Preview

Votre nom à afficher ( en option ):
Vie privée: . Votre adresse de messagerie ne sera utilisée que pour l'envoi de ces notifications .
Vérification anti -spam:
Pour éviter cette vérification à l'avenir, Connectez vous ou inscrivez vous.
...