web-dev-qa-db-fra.com

Comment ajouter un tableau multi-dimensionnel à l'aide de la boucle for en python

J'essaie de append à un tableau multi-dimensionnel.

Voici ce que j'ai fait jusqu'à présent:

arr=[[]]
for i in range(10):
    for j in range(5):
        arr[i].append(i*j)
        print i,i*j


print arr

Ceci est ma sortie attendue:

[[0,0,0,0,0],[0,1,2,3,4],[0,2,4,6,8],[0,3,6,9,12],[0,4,8,12,16],[0,5,10,15,20],[0,6,12,18,24],[0,7,14,21,28],[0,8,16,24,32],[0,9,18,27,36]]

Cependant, j'obtiens cette erreur:

IndexError: index de liste hors limites

4
Eka

Vous oubliez d'ajouter la liste vide à l'avance. Donc pourquoi vous obtenez un, IndexError lorsque vous essayez de faire arr[i].

arr = []
for i in range(10):
    arr.append([])
    for j in range(5):
        arr[i].append(i*j)
2
Vallentin

Vous devez définir votre tableau initial de la manière suivante: arr=[[] for i in range(10)], car vous ne pouvez pas ajouter de valeur à un tableau inexistant (c'est ce qui se passe quand i>=1). Donc, le code devrait ressembler à:

arr=[[] for i in range(10)]
for i in range(10):
    for j in range(5):
        arr[i].append(i*j)
        print(i,i*j)


print(arr)
5
Miriam Farber

Comme d'autres l'ont souligné , vous devez vous assurer que votre liste de listes contient initialement dix listes vides (au lieu d'une seule) afin que les éléments successifs soient correctement nommés append.

Cependant, je pourrais suggérer d'utiliser plutôt une compréhension de liste imbriquée, ce qui évite entièrement le problème en créant la liste en une seule déclaration:

arr = [[i*j for j in range(5)] for i in range(10)]
2
gyre

Vous commencez votre arr en tant que array avec un seul élément. Vous avez donc une telle erreur lorsque i devient supérieur à 0. Vous pouvez utiliser list comprehensive pour archiver votre objectif:

[[i * j for j in range(5)] for i in range(10)]
0
shizhz