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]]
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
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.]])
Wenn Sie ein mehrdimensionales Array mit Listentyp initialisieren möchten, verwenden Sie die Einschlussnotation. Es ist jedoch einfacher, mit numpy zu initialisieren.
https://note.nkmk.me/python-list-initialize/
Recommended Posts