Python fournit de puissantes structures de données appelées listes, qui peuvent stocker et manipuler des collections d'éléments. Fournit également de nombreuses façons de créer des listes/tableaux bidimensionnels. Cependant, il faut connaître les différences entre ces méthodes car elles peuvent créer des complications dans le code qui peuvent être très difficiles à retracer. Dans cet article, nous explorerons la bonne façon d'utiliser des tableaux/listes 2D en Python.
Utiliser correctement les tableaux/listes 2D
Utiliser correctement des tableaux/listes 2D implique de comprendre la structure, d’accéder aux éléments et de manipuler efficacement les données dans une grille bidimensionnelle. Lorsque vous travaillez avec des données structurées ou des grilles, des tableaux ou des listes 2D peuvent être utiles. Un tableau 2D est essentiellement une liste de listes, qui représente une structure de type tableau avec des lignes et des colonnes.
Création d'une liste 1D
En Python, l'initialisation d'une collection d'éléments dans une séquence linéaire nécessite la création d'un tableau 1D, ce qui est un processus fondamental. Bien que Python n'ait pas de structure de données intégrée appelée « tableau 1D », nous pouvons utiliser une liste qui peut atteindre la même fonctionnalité. Les listes Python sont dynamiques et polyvalentes, ce qui en fait un excellent choix pour représenter des tableaux 1D. Commençons par examiner les façons courantes de créer un tableau 1D de taille N initialisé avec des 0.
Création d'une liste 1D à l'aide de méthodes naïves
L'initialisation et le remplissage manuels d'une liste sans utiliser de fonctionnalités ou de constructions avancées dans Python sont connus sous le nom de création d'une liste 1D à l'aide de méthodes naïves.
un million en chiffres
Python3
N> => 5> ar> => [> 0> ]> *> N> print> (ar)> |
>
>
Sortir
[0, 0, 0, 0, 0]>
Création d'une liste 1D à l'aide de la compréhension de liste
Ici, nous multiplions le nombre de lignes par la liste vide et donc la liste entière est créée avec chaque élément zéro.
Python3
N> => 5> arr> => [> 0> for> i> in> range> (N)]> print> (arr)> |
>
>
Sortir
[0, 0, 0, 0, 0]>
Création d'une liste 2D
Utiliser correctement des tableaux/listes 2D implique de comprendre la structure, d’accéder aux éléments et de manipuler efficacement les données dans une grille bidimensionnelle. En maîtrisant l'utilisation des tableaux 2D, vous pouvez améliorer considérablement votre capacité à gérer des données complexes et à effectuer efficacement diverses opérations.
Création d'une liste 2D à l'aide de Méthode naïve
Ici, nous multiplions le nombre de colonnes et nous obtenons donc la liste 1-D de taille égale au nombre de colonnes, puis nous la multiplions par le nombre de lignes, ce qui aboutit à la création d'une liste 2-D.
Python3
rows, cols> => (> 5> ,> 5> )> arr> => [[> 0> ]> *> cols]> *> rows> print> (arr)> |
>
>
Sortir
[[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]]>
Note: L'utilisation de cette méthode peut parfois provoquer des comportements inattendus. Dans cette méthode, chaque ligne fera référence à la même colonne. Cela signifie que même si nous mettons à jour un seul élément du tableau, cela mettra à jour la même colonne de notre tableau.
Python
rows, cols> => (> 5> ,> 5> )> arr> => [[> 0> ]> *> cols]> *> rows> print> (arr,> 'before'> )> arr[> 0> ][> 0> ]> => 1> # update only one element> print> (arr,> 'after'> )> |
Bourne encore une coquille
>
>
Sortir
([[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]], 'before') ([[1, 0, 0, 0, 0], [1, 0, 0, 0, 0], [1, 0, 0, 0, 0], [1, 0, 0, 0, 0], [1, 0, 0, 0, 0]], 'after')>
Création d'une liste 1D à l'aide de Compréhension de la liste
Ici, nous utilisons essentiellement le concept de compréhension de liste et appliquons une boucle pour une liste à l'intérieur d'une liste et créons ainsi une liste 2D.
Python3
rows, cols> => (> 5> ,> 5> )> arr> => [[> 0> for> i> in> range> (cols)]> for> j> in> range> (rows)]> print> (arr)> |
>
>
Sortir
[[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]]>
Création d'une liste 1D à l'aide de Liste vide
Ici, nous ajoutons des zéros en tant qu'éléments pour un certain nombre de colonnes, puis ajoutons cette liste 1-D dans la liste de lignes vides et créons ainsi la liste 2-D.
Python3
qu'est-ce qu'Ubuntu essentiel à la construction
arr> => []> rows, cols> => 5> ,> 5> for> i> in> range> (rows):> > col> => []> > for> j> in> range> (cols):> > col.append(> 0> )> > arr.append(col)> print> (arr)> |
>
>
Sortir
[[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]]>
Initialisation du tableau 2D
Le code fourni démontre deux approches différentes pour initialiser un tableau 2D dans Python . Tout d'abord, le tableauarr>
est initialisé à l'aide d'une compréhension de liste 2D, où chaque ligne est créée comme[0, 0, 0, 0, 0]>
. Le tableau entier est créé sous la forme d'une liste de références à la même liste interne, ce qui entraîne un alias. Toute modification apportée à un élément dans une ligne sera reflétée dans toutes les lignes. Le code montre ensuite une autre approche utilisant une compréhension de liste imbriquée pour créer le tableau 2Darr>
. Cette méthode évite les alias en créant une nouvelle liste pour chaque ligne, ce qui donne un tableau 2D approprié.
Python3
# Python 3 program to demonstrate working> # of method 1 and method 2.> rows, cols> => (> 5> ,> 5> )> # method 2 1st approach> arr> => [[> 0> ]> *> cols]> *> rows> # lets change the first element of the> # first row to 1 and print the array> arr[> 0> ][> 0> ]> => 1> for> row> in> arr:> > print> (row)> # method 2 2nd approach> arr> => [[> 0> for> i> in> range> (cols)]> for> j> in> range> (rows)]> # again in this new array lets change> # the first element of the first row> # to 1 and print the array> arr[> 0> ][> 0> ]> => 1> for> row> in> arr:> > print> (row)> |
>
>
Sortir
[1, 0, 0, 0, 0] [1, 0, 0, 0, 0] [1, 0, 0, 0, 0] [1, 0, 0, 0, 0] [1, 0, 0, 0, 0] [1, 0, 0, 0, 0] [0, 0, 0, 0, 0] [0, 0, 0, 0, 0] [0, 0, 0, 0, 0] [0, 0, 0, 0, 0]>
Explication:
Nous nous attendons à ce que seul le premier élément de la première ligne passe à 1, mais le premier élément de chaque ligne passe à 1 dans la méthode 2a. Ce fonctionnement particulier est dû au fait que Python utilise des listes superficielles que nous allons essayer de comprendre.
Dans la méthode 1a, Python ne crée pas 5 objets entiers mais crée un seul objet entier, et tous les indices du tableau arr pointent vers le même objet int comme indiqué.
Si nous attribuons le 0ème index à un autre entier, par exemple 1, alors un nouvel objet entier est créé avec la valeur 1, puis le 0ème index pointe maintenant vers ce nouvel objet int, comme indiqué ci-dessous.
De même, lorsque nous créons un tableau 2D sous la forme arr = [[0]*cols]*rows, nous étendons essentiellement l'analogie ci-dessus.
- Un seul objet entier est créé.
- Une seule liste 1D est créée et tous ses indices pointent vers le même objet int au point 1.
- Maintenant, arr[0], arr[1], arr[2]…. arr[n-1] pointent tous vers le même objet de liste ci-dessus au point 2.
La configuration ci-dessus peut être visualisée dans l'image ci-dessous.
Modifions maintenant le premier élément de la première ligne de arr comme arr[0][0] = 1
- arr[0] pointe vers l'objet de liste unique que nous avons créé ci-dessus. (Rappelez-vous que arr[1], arr[2]…arr[n-1] pointent tous également vers le même objet de liste).
- L'affectation de arr[0][0] créera un nouvel objet int avec la valeur 1 et arr[0][0] pointera désormais vers ce nouvel objet int. (et arr[1][0] aussi, arr [2][0] … arr[n-1][0])
Cela est clairement visible dans l’image ci-dessous.
Ainsi, lorsque des tableaux 2D sont créés comme celui-ci, la modification des valeurs sur une certaine ligne affectera toutes les lignes car il n'y a essentiellement qu'un seul objet entier et un seul objet de liste référencé par toutes les lignes du tableau.
Comme on peut s'y attendre, il est difficile de retracer les erreurs causées par une telle utilisation de listes superficielles. Par conséquent, la meilleure façon de déclarer un tableau 2D est
Python3
rows, cols> => (> 5> ,> 5> )> print> ([[> 0> for> i> in> range> (cols)]> for> j> in> range> (rows)])> |
>
>
Sortir
[[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]]>
Cette méthode crée 5 objets de liste distincts, contrairement à la méthode 2a. Une façon de vérifier cela consiste à utiliser l’opérateur « est » qui vérifie si les deux opérandes font référence au même objet.
Python3
rows, cols> => (> 5> ,> 5> )> # method 2 2nd approach> arr> => [[> 0> for> i> in> range> (cols)]> for> j> in> range> (rows)]> # check if arr[0] and arr[1] refer to> # the same object> print> (arr[> 0> ]> is> arr[> 1> ])> # prints False> # method 2 1st approach> arr> => [[> 0> ]> *> cols]> *> rows> # check if arr[0] and arr[1] refer to the same object prints True because there is only one> #list object being created.> print> (arr[> 0> ]> is> arr[> 1> ])> |
plsql
>
>
Sortir
False True>