[Python] Précautions lors de l'affectation de valeurs à des tableaux multidimensionnels

Ce que je voulais faire

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

Cause

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

Solution

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.]])
       

Résumé

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.

référence

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

Recommended Posts

[Python] Précautions lors de l'affectation de valeurs à des tableaux multidimensionnels
Précautions lors de l'attribution de valeurs par défaut aux arguments dans les définitions de fonctions Python
Remarque Python: lors de l'attribution d'une valeur à une chaîne
Conseils et précautions lors du portage des programmes MATLAB vers Python
Précautions pour la mise à niveau de TensorFlow (vers la version 1.3)
Appeler des fonctions du langage C depuis Python pour échanger des tableaux multidimensionnels
Précautions lors de l'utilisation de Pit avec Python
Vérifiez le comportement lors de l'attribution de Python
[Python] Comment permuter les valeurs de tableau
Précautions lors de la création d'un générateur Python
Précautions lors de l'utilisation de phantomjs de python
Précautions lors de l'utilisation de six avec Python 2.5
Précautions lors du passage de def aux fonctions triées et groupby en Python? ??
Précautions lors du décapage d'une fonction en python
[Introduction à l'application Udemy Python3 +] 10. Valeur numérique
Points à noter lors de la résolution de problèmes DP avec Python
Comment démarrer Python (Flask) au démarrage d'EC2
[Introduction à Udemy Python3 + Application] 38. Lors du jugement Aucun
Convertir les valeurs d'époque Windows à ce jour avec python
Précautions lors du traitement des structures de contrôle dans Python 2.6
Ce que j'ai fait lors de la mise à jour de Python 2.6 vers 2.7
Erreur lors de la tentative d'installation de psycopg2 en Python
[Développement Web avec Python] Précautions lors de l'enregistrement des cookies
Matériel à lire lors de la mise en route de Python
Mis à jour vers Python 2.7.9
Python: valeurs Tips-Swap
Tableau multidimensionnel Python
Ordre d'accès des tableaux multidimensionnels lors de l'appel de sous-programmes Fortran à partir de Python (ctypeslib et f2py)
"Backport" vers python 2
[Python] Comment supprimer les valeurs en double de la liste
Quand j'ai essayé d'introduire python3 dans atom, je suis resté coincé
Points à garder à l'esprit lors du développement d'un robot d'exploration en Python
Remarque sur l'attribution de textures d'image aux matériaux dans Maya python
Précautions lors du traitement du type ROS MultiArray en Python
Points à garder à l'esprit lors de la copie de listes Python
Python - Remarques lors de la conversion du type str en type int
Choses à noter lors de l'initialisation d'une liste en Python
python Spécifie la fonction à exécuter lorsque le programme se termine
Comment quitter lors de l'utilisation de Python dans Terminal (Mac)
Articles à voir lorsque l'installation de Python + OpenCV échoue
Que faire lorsque "impossible d'importer le nom xxx" [Python]
Seuls les tableaux de taille 1 peuvent être convertis en scalaires Python
Comment récupérer plusieurs tableaux à l'aide de slice en python.
Points à garder à l'esprit lors du traitement des chaînes en Python2
[Python] Comment afficher les valeurs de liste dans l'ordre
Ce à quoi j'étais accro lors de l'utilisation de Python tornado
Points à garder à l'esprit lors du traitement des chaînes en Python 3
Je veux faire quelque chose avec Python à la fin
Note Python: Le mystère de l'attribution d'une variable à une variable
Précautions lors de la saisie à partir de CSV avec Python et de la sortie vers json pour faire exe