J'essayais de substituer un certain nombre (60) au tableau bidimensionnel initialisé (dp) en raison d'un problème lié à la programmation dynamique.
[Problème] Atcoder EDPC C-Vacation (https://atcoder.jp/contests/dp/tasks/dp_c)
J'ai écrit le code suivant.
dp=[[0,0,0]]*5
print(dp)
#production[[0,0,0],[0,0,0],[0,0,0],[0,0,0],[0,0,0]]
a=[10,40,70]
dp[0]=a
print(dp)
#production[[10,40,70],[0,0,0],[0,0,0],[0,0,0],[0,0,0]]
#Ci-dessous le code en question#######
dp[0][1]=60
print(dp)
#production[[10,40,70],[0,60,0],[0,60,0],[0,60,0],[0,60,0]]
Je voulais vraiment remplacer 60 uniquement par dp [0] [1]. (Moins que)
print(dp)
#production[[10,40,70],[0,60,0],[0,0,0],[0,0,0],[0,0,0]]
Si la liste est initialisée comme indiqué ci-dessous, toutes les listes d'éléments seront créées comme le même objet. (Moins que)
#Mauvais exemple 1
dp=[[0,0,0]]*5
#Mauvais exemple 2
dp=[[0]*3]*5
Si vous initialisez la liste avec " Notation inclusive </ b>" comme indiqué ci-dessous, tous peuvent être créés en tant qu'objets différents.
dp=[[0]*3 for i in range(5)]
dp[0][1]=60
print(dp)
#production[[10,40,70],[0,60,0],[0,0,0],[0,0,0],[0,0,0]]
numpy facilite les choses
import numpy as np
dp=np.zeros((5,3))
dp[0,1]=60
print(dp)
#Tableau de sortie([[ 0., 0., 0.],[ 0., 60., 0.],[ 0., 0., 0.],[ 0., 0., 0.],[ 0., 0., 0.]])
Si vous souhaitez initialiser un tableau multidimensionnel avec un type de liste, utilisez la notation d'inclusion. Cependant, il est plus facile de s'initialiser avec numpy.
https://note.nkmk.me/python-list-initialize/
Recommended Posts