Python | 2D-Arrays/Listen richtig verwenden

| | | | | |

Methode 1a


# Erste Methode zum Erstellen eines 1-D-Arrays

N = 5

arr = [ 0 ] * N

print (arr)

Ausgabe:

[0, 0, 0, 0, 0] 

Methode 1b

# Zweiter Weg zum Erstellen von Array 1 D

N = 5

arr = [ 0 for i im Bereich (N)]

print (arr)

Exit:

[0, 0, 0, 0, 0 ] 

Wenn wir das Obige erweitern, können wir zweidimensionale Arrays definieren auf die folgende Weise.
Methode 2a


# Verwenden der obigen ersten Methode zum Erstellen von
# 2D-Array

Zeilen, Spalten = ( 5 , 5 )

arr = [[ 0 ] * cols] * rows

print (arr)

Exit:

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

Methode 2b


# Verwenden der obigen zweiten Methode zum Erstellen von
# 2D-Arrays

Zeilen, cols = ( 5 , 5 )

arr = [[ 0 für i in range (cols)] for j in Bereich (rows)]

print (arr)

Ausgabe:

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

Beide Methoden scheinen dasselbe Ergebnis wie jetzt zu liefern. Lassen Sie uns eines der Elemente im Array von Methode 2a und Methode 2b ersetzen.


# Python 3-Programm, um zu demonstrieren, wie es funktioniert
# Methode 1 und Methode 2.

rows , cols = ( 5 , 5 )


# method 2a

arr = [[ 0 ] * Spalten] * rows


# Ändere die erste element
# erste Zeile auf 1 und drucke das Array

arr [ 0 ] [ 0 ] = 1

for row in arr:

print (row)

# gibt folgendes aus
# [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]


# Methode 2b

arr = [[ 0 für i in range (cols)] for j in range (rows)]


# Zurück zu diesem neuen Array können Sie
# erstes Element der ersten Zeile ändern
# bis 1 und drucke das Array

arr [ 0 ] [ 0 ] = 1

für row in arr:

print (row)


# gibt wie erwartet Folgendes aus
# [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]

Beenden:

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

Wir erwarten nur das erste Element von die erste Zeile auf 1 zu ändern, aber das erste Element jeder Zeile wird in Methode 2a auf 1 geändert. Diese Art der Funktionsweise ist darauf zurückzuführen, dass Python flache Listen verwendet, die wir versuchen zu verstehen.

Bei Methode 1a erstellt Python nicht 5 Integer-Objekte, sondern nur ein Integer-Objekt und alle Indizes des arr-Arrays zeigen auf dasselbe int-Objekt wie gezeigt.


Wenn wir den 0. Index einer anderen Ganzzahl zuweisen, sagen wir 1, dann wird ein neues Integer-Objekt mit dem Wert 1 erstellt, und dann zeigt der 0. Index nun auf dieses neue int-Objekt, wie unten gezeigt

Ebenso, wenn wir ein zweidimensionales Array erstellen wie "arr = [[0] * cols] * row " , das sind wir tatsächlich, wir erweitern die obige Analogie.
1. Es wird nur ein Integer-Objekt erstellt.
2. Eine Liste 1d wird erstellt, und alle ihre Indizes zeigen an Punkt 1 auf dasselbe int-Objekt.
3. Jetzt arr [0], arr [1], arr [2]…. arr [n-1] zeigen alle auf dasselbe Listenobjekt oben in Schritt 2.

Die obige Einstellung kann im Bild unten visualisiert werden.

Nun ändern wir das erste Element in der ersten Zeile" arr "als
arr [0] [0] = 1

=" arr [0] zeigt auf dasselbe Listenobjekt, das wir oben erstellt haben (denken Sie daran, dass arr [1], arr [2]… arr [n-1] auch auf dasselbe Listenobjekt zeigen)
= & gt ; Durch die Zuweisung von arr [0] [0] wird ein neues int-Objekt mit dem Wert 1 erstellt, und arr [0] [0] zeigt nun auf dieses neue int-Objekt. (Und so wird es arr [1] [0], arr [2] [0]… arr [n-1] [0])

Dies ist im Bild unten deutlich zu sehen .


Also, wenn 2D-Arrays auf diese Weise erstellt werden, ändern sich die Werte ‚Äã‚Äãin einer bestimmten Zeile wirken sich auf alle Strings aus, da es im Wesentlichen nur ein Integer-Objekt und nur ein Listenobjekt gibt, auf das alle Zeilen im Array verweisen.

Wie zu erwarten, track down Fehler, die durch diese Verwendung flacher Listen verursacht werden. kompliziert. Daher ist der beste Weg, ein 2D-Array zu deklarieren,


rows, cols = ( 5 , 5 )

arr = [[ 0 for i in range (cols)] für j im Bereich (rows )]

Exit:

 

Diese Methode erstellt 5 separate Listenobjekte im Gegensatz zu Methode 2a. Eine Möglichkeit, dies zu überprüfen — Verwenden Sie den "is"-Operator, der prüft, ob zwei Operanden auf dasselbe Objekt verweisen.


Zeilen, Spalten = ( 5 , 5 )

# Methode 2b

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


# prüfen, ob arr [0] und arr [1] auf
# dasselbe Objekt

print (arr [ 0 ] ist arr [ 1 ] ) # gibt Falsch aus


# method 2a

arr = [[ 0 ] * cols] * rows


# prüfen, ob arr [0] und arr [1] auf
# verweisen Das Objekt
# gibt True aus, weil es nur eine
# Liste des zu erstellenden Objekts gibt.

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

Exit:

False True 

Python | 2D-Arrays/Listen richtig verwenden Arrays: Questions

Python | 2D-Arrays/Listen richtig verwenden 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