Python | Utilisation de tableaux 2D / Listes de la bonne manière

| | | | | |

Méthode 1a


# Première façon de créer un tableau 1 D

N = 5

arr = [ 0 ] * N

print (arr)

Sortie :

[0, 0, 0, 0, 0] 

Méthode 1b

# Deuxième façon de créer le tableau 1 D

N = 5

arr = [ 0 pour i dans plage (N)]

print (arr)

Quitter :

[0, 0, 0, 0, 0 ] 

En prolongeant ce qui précède, nous pouvons définir des tableaux à 2 dimensions de la manière suivante.
Méthode 2a


# Utilisation de la première méthode ci-dessus pour créer
# tableau 2D

lignes, colonnes = ( 5 , 5 )

arr = [[ 0 ] * colonnes] * lignes

print (arr)

Quitter :

[[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]] 

Méthode 2b


# Utilisation de la deuxième méthode ci-dessus pour créer
# tableau 2D

lignes, cols = ( 5 , 5 )

arr = [[ 0 pour je dans range (cols)] for j dans plage (lignes)]

print (arr)

Sortie :

[[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]] 

Les deux méthodes semblent donner le même résultat que maintenant. Remplaçons l`un des éléments du tableau de la méthode 2a et de la méthode 2b.


# Programme Python 3 pour démontrer son fonctionnement
# méthode 1 et méthode 2.

rows , cols = ( 5 , 5 )


# méthode 2a

arr = [[ 0 ] * cols] * rows


# change le premier element
# première ligne à 1 et imprimer le tableau

arr [ 0 ] [ 0 ] = 1

pour ligne dans arr :

print (ligne)

# affiche les éléments suivants
# [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]


# méthode 2b

arr = [[ 0 for i in range (cols)] for j in range (lignes)]


# retour à ce nouveau tableau vous permet de modifier
# premier élément de la première ligne
# à 1 et imprime le tableau

arr [ 0 ] [ 0 ] < classe de code = "mot clé"> = 1

pour ligne dans arr :

imprimer (ligne)


# affiche les éléments suivants comme prévu
# [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]

Quitter :

[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] 

Nous attendons seulement 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 genre de fonctionnement est dû au fait que Python utilise des listes peu profondes, ce que nous allons essayer de comprendre.

Dans la méthode 1a, Python ne crée pas 5 objets entiers, mais un seul objet entier, et tous les index du tableau arr pointent vers le même objet int comme indiqué.


Si nous attribuons le 0ème index à un autre entier, disons 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 à deux dimensions comme" arr = [[0] * cols] * row " , nous sommes en fait, nous élargissons l`analogie ci-dessus.
1. Un seul objet entier est créé.
2. Une liste 1d est créée et tous ses indices pointent vers le même objet int au point 1.
3. Maintenant arr [0], arr [1], arr [2]‚Ķ. arr [n-1] pointent tous vers le même objet de liste ci-dessus à l`étape 2.

Le paramètre ci-dessus peut être visualisé dans l`image ci-dessous.

Changeons maintenant le premier élément de la première ligne" arr "comme
arr [0] [0] = 1

=" arr [0] pointe vers le même objet de liste que nous avons créé ci-dessus (rappelez-vous que arr [1], arr [2]‚Ķ arr [n-1] pointe également vers le même objet de liste)
= & gt ; L`affectation de arr [0] [0] créera un nouvel objet int avec une valeur de 1, et arr [0] [0] pointera maintenant vers ce nouvel objet int. (Et donc ce sera arr [1] [0], arr [2] [0]‚Ķ arr [n-1] [0])

Cela se voit clairement dans l`image ci-dessous .


Ainsi, lorsque des tableaux 2d sont créés de cette manière, en changeant les valeurs ‚Äã‚Äãdans une certaine ligne affecteront toutes les chaînes, car il n`y a essentiellement qu`un seul objet entier et un seul objet liste référencé par toutes les lignes du tableau.

Comme vous vous en doutez, recherchez erreurs causées par cette utilisation de listes peu profondes. compliqué. Par conséquent, la meilleure façon de déclarer un tableau 2d est


rows, cols = ( 5 , 5 )

arr = [[ 0 for je dans range (cols)] for j in range (rows )]

Quitter :

 

Cette méthode crée 5 objets de liste séparés par opposition à la méthode 2a. Une façon de vérifier cela — utilisez l`opérateur "is", qui vérifie si deux opérandes font référence au même objet.


lignes, colonnes = ( 5 , 5 )

# méthode 2b

arr = [[ 0 pour i in range ( cols)] pour j dans plage (lignes)]


# vérifie si arr [0] et arr [1] font référence à
# même objet

print (arr [ 0 ] est arr [ 1 ] ) # affiche False


# méthode 2a

arr = [[ 0 ] * cols] * lignes


# vérifie si arr [0] et arr [1] font référence à
# que sam L`objet
# affiche Vrai car il n`y a qu`une seule
# liste de l`objet à créer.

print (arr [ 0 ] est arr [ 1 ])

Sortie :

Faux Vrai 

Python | Utilisation de tableaux 2D / Listes de la bonne manière Arrays: Questions

Python | Utilisation de tableaux 2D / Listes de la bonne manière exp: Questions

Shop

Best Python online courses for 2022

$

Best laptop for Fortnite

$

Best laptop for Excel

$

Best laptop for Solidworks

$

Best laptop for Roblox

$

Best computer for crypto mining

$

Best laptop for Sims 4

$

Best laptop for Zoom

$499

Latest questions

NUMPYNUMPY

psycopg2: insert multiple rows with one query

12 answers

NUMPYNUMPY

How to convert Nonetype to int or string?

12 answers

NUMPYNUMPY

How to specify multiple return types using type-hints

12 answers

NUMPYNUMPY

Javascript Error: IPython is not defined in JupyterLab

12 answers

Wiki

Python OpenCV | cv2.putText () method

numpy.arctan2 () in Python

Python | os.path.realpath () method

Python OpenCV | cv2.circle () method

Python OpenCV cv2.cvtColor () method

Python - Move item to the end of the list

time.perf_counter () function in Python

Check if one list is a subset of another in Python

Python os.path.join () method