[Python] Vorsichtsmaßnahmen beim Zuweisen von Werten zu mehrdimensionalen Arrays

Was ich machen wollte

Ich habe versucht, das initialisierte zweidimensionale Array (dp) aufgrund eines Problems im Zusammenhang mit der dynamischen Programmierung durch eine bestimmte Zahl (60) zu ersetzen.

[Problem] Atcoder EDPC C-Vacation (https://atcoder.jp/contests/dp/tasks/dp_c)

Ich habe den folgenden Code geschrieben.

dp=[[0,0,0]]*5
print(dp)
#Ausgabe[[0,0,0],[0,0,0],[0,0,0],[0,0,0],[0,0,0]]

a=[10,40,70]
dp[0]=a
print(dp)
#Ausgabe[[10,40,70],[0,0,0],[0,0,0],[0,0,0],[0,0,0]]


#Unten ist der fragliche Code#######
dp[0][1]=60
print(dp)
#Ausgabe[[10,40,70],[0,60,0],[0,60,0],[0,60,0],[0,60,0]]

Ich wollte wirklich nur dp [0] [1] durch 60 ersetzen. (Weniger als)


print(dp)
#Ausgabe[[10,40,70],[0,60,0],[0,0,0],[0,0,0],[0,0,0]]

Ursache

Wenn die Liste wie unten gezeigt initialisiert wird, werden alle Elementlisten als dasselbe Objekt erstellt. (Weniger als)

#Schlechtes Beispiel 1
dp=[[0,0,0]]*5

#Schlechtes Beispiel 2
dp=[[0]*3]*5

Lösung

Wenn Sie die Liste wie unten gezeigt mit " Inklusive Notation </ b>" initialisieren, können alle als unterschiedliche Objekte erstellt werden.


dp=[[0]*3 for i in range(5)]
dp[0][1]=60
print(dp)
#Ausgabe[[10,40,70],[0,60,0],[0,0,0],[0,0,0],[0,0,0]]

Numpy macht es einfach

import numpy as np

dp=np.zeros((5,3))
dp[0,1]=60
print(dp)
#Ausgabearray([[ 0.,  0.,  0.],[ 0., 60.,  0.],[ 0., 0.,  0.],[ 0., 0.,  0.],[ 0., 0.,  0.]])
       

Zusammenfassung

Wenn Sie ein mehrdimensionales Array mit Listentyp initialisieren möchten, verwenden Sie die Einschlussnotation. Es ist jedoch einfacher, mit numpy zu initialisieren.

Referenz

https://note.nkmk.me/python-list-initialize/

Recommended Posts

[Python] Vorsichtsmaßnahmen beim Zuweisen von Werten zu mehrdimensionalen Arrays
Vorsichtsmaßnahmen beim Festlegen von Standardwerten für Argumente in Python-Funktionsdefinitionen
Python Hinweis: Wenn Sie einer Zeichenfolge einen Wert zuweisen
Tipps und Vorsichtsmaßnahmen beim Portieren von MATLAB-Programmen nach Python
Vorsichtsmaßnahmen für das TensorFlow-Upgrade (auf 1.3)
Rufen Sie C-Sprachfunktionen von Python auf, um mehrdimensionale Arrays auszutauschen
Vorsichtsmaßnahmen bei der Verwendung von Pit mit Python
Überprüfen Sie das Verhalten beim Zuweisen von Python
[Python] So tauschen Sie Array-Werte aus
Vorsichtsmaßnahmen beim Erstellen eines Python-Generators
Vorsichtsmaßnahmen bei der Verwendung von Phantomjs aus Python
Vorsichtsmaßnahmen bei Verwendung von sechs mit Python 2.5
Vorsichtsmaßnahmen beim Übergeben von def an sortierte und gruppierte Funktionen in Python? ??
Vorsichtsmaßnahmen beim Beizen einer Funktion in Python
[Einführung in die Udemy Python3 + -Anwendung] 10. Numerischer Wert
Zu beachtende Punkte bei der Lösung von DP-Problemen mit Python
So starten Sie Python (Flask) beim Start von EC2
[Einführung in die Udemy Python3 + -Anwendung] 38. Bei der Beurteilung von None
Konvertieren Sie Windows-Epochenwerte mit Python in das Datum
Vorsichtsmaßnahmen beim Umgang mit Kontrollstrukturen in Python 2.6
Was ich beim Update von Python 2.6 auf 2.7 gemacht habe
Fehler beim Versuch, psycopg2 in Python zu installieren
[Webentwicklung mit Python] Vorsichtsmaßnahmen beim Speichern von Cookies
Materialien zum Lesen, wenn Sie mit Python beginnen
Auf Python 2.7.9 aktualisiert
Python: Tips-Swap-Werte
Mehrdimensionales Python-Array
Zugriffsreihenfolge mehrdimensionaler Arrays beim Aufrufen von Fortran-Subroutinen aus Python (ctypeslib und f2py)
"Backport" zu Python 2
[Python] So entfernen Sie doppelte Werte aus der Liste
Als ich versuchte, Python3 in Atom einzuführen, blieb ich stecken
Dinge, die Sie bei der Entwicklung von Crawlern in Python beachten sollten
Beachten Sie, dass Sie Materialien in Maya Python Bildtexturen zuweisen
Vorsichtsmaßnahmen beim Umgang mit ROS MultiArray in Python
Dinge, die Sie beim Kopieren von Python-Listen beachten sollten
Python - Hinweise beim Konvertieren vom Typ str in den Typ int
Beachten Sie beim Initialisieren einer Liste in Python
Python Gibt die Funktion an, die ausgeführt werden soll, wenn das Programm endet
Beenden bei Verwendung von Python in Terminal (Mac)
Artikel, die angezeigt werden, wenn die Installation für Python + OpenCV fehlschlägt
Was tun, wenn "Name xxx nicht importiert werden kann" [Python]
Nur Arrays der Größe 1 können in Python-Skalare konvertiert werden
So rufen Sie mehrere Arrays mit Slice in Python ab.
Dinge, die Sie bei der Verarbeitung von Zeichenfolgen in Python2 beachten sollten
[Python] So geben Sie Listenwerte der Reihe nach aus
Wovon ich süchtig war, als ich Python Tornado benutzte
Dinge, die Sie bei der Verarbeitung von Zeichenfolgen in Python 3 beachten sollten
Ich möchte am Ende etwas mit Python machen
Python Hinweis: Das Rätsel, einer Variablen eine Variable zuzuweisen
Vorsichtsmaßnahmen bei der Eingabe von CSV mit Python und der Ausgabe an json, um exe zu erstellen