J'ai actuellement un code qui se lit comme suit:
letters = {
10 : "A",
11 : "B",
12 : "C",
13 : "D",
14 : "E",
15 : "F"
}
vallist = [rd1, rd2, gd1, gd2, bd1, bd2]
for i in vallist:
if i >= 10:
i = letters[i]
Ce que je veux, c'est la boucle for pour parcourir vallist et remplacer toute valeur qui est supérieur à 10 avec sa lettre correspondante. Cependant, mon code actuel change simplement i et non la valeur d'origine de la liste. Par exemple, si rd1 est défini sur 15, le code passe et i est défini sur "F" , mais rd1 ne se transforme pas en "F" , mais reste juste à 15. Comment puis-je résoudre ce problème?
4 Réponses :
Pour chaque itération de la boucle for , la variable i est assignée avec juste une copie de la valeur d'un élément dans vallist , donc les modifications apportées à i ne seront pas reflétées dans i .
Vous devez mettre à jour les éléments de i via l'index, que vous pouvez générer avec la fonction enumerate :
for index, value in enumerate(vallist):
if value >= 10:
vallist[index] = letters[value]
rd1, rd2, gd1, gd2, bd1, bd2 = 10, 11, 12, 13, 14, 9
letters = {
10 : "A",
11 : "B",
12 : "C",
13 : "D",
14 : "E",
15 : "F"
}
vallist = [rd1, rd2, gd1, gd2, bd1, bd2]
for index, value in enumerate(vallist):
if value >= 10 and value <= 15:
vallist[index] = letters[value]
print(vallist)
As mentioned in the other comment you need both the index and the value while looping over your vallist. so you can replace the value on the index with the value in your dictionary.
for i in range(len(vallist)):
if vallist[i] >= 10:
vallist[i] = letters[i]
Because in your case i is just a copy of the current item in vallist. But this way i will be an index, so you can modify your original list throught it.
en fait, i est la référence de cet élément du tableau et les changements de valeur ne seront pas affectés à cet élément, essayez plutôt ceci,
# en parcourant chaque index du tableau
for i in range(len(vallist)):
if vallist[i] >= 10 and vallist[i]<=15:
vallist[i] = letters[vallist[i]]