Problème liste python
nejah
-
nejah -
nejah -
Bonjour,
J'ai saisi le code suivant en python dont son objectif le remplissage du contenu d'une matrice présenté par une liste de liste
le programme s'exécute sans une erreur syntaxique mais le problème lors de l'affichage du contenu de cette matrice je découvre que chaque ligne de cette matrice est remplie par les valeurs de la dernière ligne, j'ai découvert l'erreur à travers une intervention d'un collègue et qui consiste de remplacer l'instruction de déclaration de la liste m=[[0]*c]*l par la déclaration d'une liste de compréhension suivante: m=[[0]*c for i in range(l)]
ma question qu'est ce qui s'est passé au niveau de la mémoire centrale et qui a provoquer cette erreur sémantique, car j'ai pas trouver une réponse logique
et merci
J'ai saisi le code suivant en python dont son objectif le remplissage du contenu d'une matrice présenté par une liste de liste
def saisir(): while True: l=int(input('Donner le nombre de lignes: ')) if 2<=l<=10: break while True: c=int(input('Donner le nombre de colonnes: ')) if 2<=c<=10: break return l,c def remplir(l,c): m=[[0]*c]*l for i in range(l): for j in range(c): while True: m[i][j]=int(input('M['+str(i)+','+str(j)+']= ')) if (0<=m[i][j]<=9): break return m def affichage(m,l,c): print('--- Contenu de la matrice ---') for i in range(l): for j in range(c): if j<c-1: print(m[i][j],end=' ') else: print(m[i][j]) l,c=saisir() m=remplir(l,c) affichage(m,l,c)
le programme s'exécute sans une erreur syntaxique mais le problème lors de l'affichage du contenu de cette matrice je découvre que chaque ligne de cette matrice est remplie par les valeurs de la dernière ligne, j'ai découvert l'erreur à travers une intervention d'un collègue et qui consiste de remplacer l'instruction de déclaration de la liste m=[[0]*c]*l par la déclaration d'une liste de compréhension suivante: m=[[0]*c for i in range(l)]
ma question qu'est ce qui s'est passé au niveau de la mémoire centrale et qui a provoquer cette erreur sémantique, car j'ai pas trouver une réponse logique
et merci
Configuration: Windows / Chrome 94.0.4606.61
A voir également:
- Trier une liste python sans sort
- Liste déroulante excel - Guide
- Excel trier par ordre croissant chiffre - Guide
- Citizen code python avis - Accueil - Outils
- Liste déroulante en cascade - Guide
- Liste code ascii - Guide
1 réponse
Bonjour,
La création d'un tableau avec * ne crée pas une nouvelle ligne physique, mais une référence vers la première ligne, on n'a donc qu'une seule ligne. Tout comme
Voir : https://snakify.org/fr/lessons/two_dimensional_lists_arrays/#section_2
La création d'un tableau avec * ne crée pas une nouvelle ligne physique, mais une référence vers la première ligne, on n'a donc qu'une seule ligne. Tout comme
tableau2 = tableau1ne crée pas un nouveau tableau, mais tableau2 est une référence mémoire qui pointe vers tableau1, modifier l'un ou l'autre c'est pareil, il n'y a qu'une seule zone mémoire pour les 2 tableaux.
Voir : https://snakify.org/fr/lessons/two_dimensional_lists_arrays/#section_2
Pour gérer des tableaux en Python, on va souvent utiliser une bibliothèque spécialisée, comme NUMPY, qui comporte des fonctions pour les créer et les manipuler plus développées qu'en Python natif.