Python - Comment changer les valeurs dans une liste de listes?
J'ai une liste de listes, chaque liste dans la liste contient 5 éléments, comment puis-je modifier les valeurs des éléments de la liste? J'ai essayé ce qui suit:
for [itemnumber, ctype, x, y, delay] in execlist:
if itemnumber == mynumber:
ctype = myctype
x = myx
y = myy
delay = mydelay
À l'origine, j'avais une liste de tuples, mais j'ai réalisé que je ne peux pas changer les valeurs dans un tuple donc je suis passé à des listes, mais j'ai encore cant modifier les valeurs. Si j'ai l'impression ctype, x, y, retard, myctype, myx, myy, ou mydelay de l'intérieur de la boucle for, il semble que tout fonctionne, mais si j'ai l'impression execlist par la suite je vois que rien n'a changé.
source d'informationauteur Wichid Nixin
Vous devez vous connecter pour publier un commentaire.
Le problème, c'est que vous êtes la création d'une copie de la liste et ensuite modifier la copie. Ce que vous voulez faire est de modifier la liste d'origine. Essayez plutôt ceci:
Vous devez affecter par les index. Disons que vous avez une liste de listes, où les listes internes ont chacun des 5 éléments, comme vous décrivez. Si vous souhaitez effectuer une itération à travers eux et de changer la valeur du deuxième élément de chaque liste interne, vous pourriez faire quelque chose comme:
Vous pouvez utiliser
enumerate()
:Vous pouvez supprimer le
#
siexeclist
ne contient au plus une sous-liste dont le premier élément peut être égale à l'mynumber
; sinon, vous aurez cycle inutilement à travers l'ensemble du reste de la liste.Et si le
itemnumbers
sont en fait unique, vous pourriez être mieux avec un dictionnaire ou au moins unOrderedDict
en fonction de ce que vous comptez faire avec vos données.Variable déballage ne semble pas passer la référence mais copie les valeurs.
Une solution serait de faire comme ceci:
Ne pas affecter les variables locales dans les listes. Dans la boucle
Juste définit la variable
i
à 5 et laisse le contenu de la liste inchangée. Au lieu de cela, vous devez l'affecter directement:Il en va de même pour les listes de listes, mais dans ce cas, la variable locale n'a pas à être affecté de sorte que vous pouvez utiliser le
for...in
construire.Changeant les variables assignées dans le
for
ne pas modifier la liste. Voici un assez lisible à faire ce que vous voulez:De sortie:
L'itérateur variables sont des copies de l'original (Python n'a pas une notion de référence en tant que telle, bien que des structures telles que les listes sont désignées par la référence). Vous avez besoin de faire quelque chose comme:
item
lui-même est une copie, mais c'est une copie d'une référence à l'original de la liste imbriquée, de sorte que lorsque vous vous référez à ses éléments de la première liste est mise à jour.Ce n'est pas aussi pratique car vous n'avez pas les noms; peut-être un dictionnaire ou d'une classe serait plus pratique structure.