Partage
  • Partager sur Facebook
  • Partager sur Twitter

Déclarer un tableau multidimensionnel en python

Sujet résolu
2 février 2012 à 10:34:47

Bien le bonjour à la communauté du site du zero ^^ !

Ma question est toute simple :
On fait comment pour fixer le nombre de lignes et de colonnes d'un tableau à deux dimension ?
En C on déclare un tableau de taille N,M comme ceci :

define N 10
define M 20
int tableau[N][M] .

Mais comme je n'ai pas l'habitude avec python, je ne connaît pas la syntaxe exacte .

Une dernière chose. Je voudrais connaître la signification en python de : grid={}

Un grand merci à tous pour votre aide ^^
  • Partager sur Facebook
  • Partager sur Twitter
2 février 2012 à 13:02:05

Bonjour,

pour créer un tableau multidimensionnel en l’occurrence en 2D, on peut procéder comme cela (Pour un tableaux de 10 par 10 en 2D. Je précise que c'est une méthode naïve):

l_map = [] #Cette liste contiendra ma map en 2D
for i in range(10):
    l_map.append([0] * 10) #Ajoute 10 colonnes de 10 entiers(int) ayant pour valeurs 0


[[0, 0, 0, 0, 0, 0, 0, 0, 0, 0], 
 [0, 0, 0, 0, 0, 0, 0, 0, 0, 0], 
 [0, 0, 0, 0, 0, 0, 0, 0, 0, 0], 
 [0, 0, 0, 0, 0, 0, 0, 0, 0, 0], 
 [0, 0, 0, 0, 0, 0, 0, 0, 0, 0], 
 [0, 0, 0, 0, 0, 0, 0, 0, 0, 0], 
 [0, 0, 0, 0, 0, 0, 0, 0, 0, 0], 
 [0, 0, 0, 0, 0, 0, 0, 0, 0, 0], 
 [0, 0, 0, 0, 0, 0, 0, 0, 0, 0], 
 [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]]


P.S: J'ai arrangé le résultat pour qu'il soit plus présentable

Pour ta seconde question, je te conseil d'aller faire un tour ici.
Il signifie: Créer une variable de type 'dictionnaire' (clef/valeur) (ayant pour nom 'grid')
  • Partager sur Facebook
  • Partager sur Twitter
2 février 2012 à 13:09:54

Réponse courte :

Python n'est pas C.

Il n'y a pas de tableau en Python (à moins que tu veuilles utiliser un numpy.array, mais ce n'est pas ton cas ici).

La réponse de realmagma te donne un équivalent poids-patate avec des listes (!= tableaux). En une ligne :

grid = [[0] * colonnes for _ in range(lignes)]
  • Partager sur Facebook
  • Partager sur Twitter
Zeste de Savoir, le site qui en a dans le citron !
2 février 2012 à 13:47:09

@nohar et realmagma : Merci !!! :)
  • Partager sur Facebook
  • Partager sur Twitter
2 février 2012 à 16:02:17

Juste pour dire qu'il y a un danger avec le code suivant (que personne n'a heureusement proposé !)
faux = [[0]*colonnes]*lignes

qui, en apparence, donne un 'tableau 2D' rempli de zéro.

Mais modifiez faux[2][2] et observez le résultat !!!

Raison : une seule liste est créée, et <lignes> copies de l'adresse du tableau sont les éléments de 'faux'. Toutes les adresses pointent sur la même liste.
  • Partager sur Facebook
  • Partager sur Twitter
2 février 2012 à 17:04:11

L'explication de La Hache me paraissant un peu confuse, je me permets de rajouter mon grain de sel, parce que c'est une subtilité de Python qui n'est pas évidente au premier abord.

>>> lignes, colonnes = 3, 4
>>> lst = [[0] * colonnes] * lignes
>>> lst[1][1] = 2
>>> lst
[[0, 2, 0, 0], [0, 2, 0, 0], [0, 2, 0, 0]]


Ce comportement est dû au fait que lorsque python évalue l'expression [[0] * colonnes] * lignes, il va interpréter [0] * colonnes comme étant un objet de type list qui ne sera créé qu'une fois. En gros, c'est strictement équivalent à :

>>> tmp = [0] * colonnes
>>> tmp
[0, 0, 0, 0]
>>> lst = [tmp] * lignes
>>> lst
[[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]]
>>> lst[1][1] = 4
>>> lst
[[0, 4, 0, 0], [0, 4, 0, 0], [0, 4, 0, 0]]


Ce comportement est plus facile à comprendre ainsi : tmp est une référence sur une liste, et c'est la référence (et non la liste pointée par tmp) qui est répliquée 3 fois dans la nouvelle liste lst.

En revanche, ici :

>>> lst = [[0] * colonnes for _ in range(lignes)]
>>> lst
[[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]]
>>> lst[1][1] = 3
>>> lst
[[0, 0, 0, 0], [0, 3, 0, 0], [0, 0, 0, 0]]


L'expression [0] * colonnes sera interprétée "lignes fois", ce qui crée une nouvelle liste à chaque interprétation et donne bien le résultat attendu.
  • Partager sur Facebook
  • Partager sur Twitter
Zeste de Savoir, le site qui en a dans le citron !
3 février 2012 à 9:39:34

Ça me rappelle de bons souvenirs, arrachage de cheveux, toussa... :lol:
  • Partager sur Facebook
  • Partager sur Twitter
23 février 2014 à 15:34:05

Slt à tous cher internautes, je voulais savoir comment déclarer une matrice en python sachant qu'elle ne fait pas partie des paramétres de ma fonction, bon pour etre plus claire j'ai genre ça :

def m_mat(A, B): # Ou A et B sont 2 matrices carrée

     i = 0

     j = 0

     k = 1

     C = [len(A)][len(A)] # ?????? python ne comprend pas alors qu'en C c'est evident

     while i < len(A):

           while j < len(A):

                   somme = 0

                   while k < len(A):

                             somme += (A[i][k] * B[k][j])

                             k += 1

                             C[i][j] = somme

                    j += 1

           i += 1

   return C

Merci pour ceux qui ont eu la motivation de m'aidé . Cdlt

  • Partager sur Facebook
  • Partager sur Twitter
23 février 2014 à 17:07:00

Salut jenesaispaspk,

Je t'invite à créer ton propre sujet pour ton problème. De plus merci d'utiliser le bouton "</>" en haut de l'éditeur pour inclure du code dans ton message.

  • Partager sur Facebook
  • Partager sur Twitter