Change values in a list using a for loop (python)
Solution 1
For each iteration of the for
loop the variable i
is assigned with just a copy of the value of an item in vallist
, so changes made to i
won't be reflected in i
.
You should update the items of i
via index, which you can generate with the enumerate
function:
for index, value in enumerate(vallist):
if value >= 10:
vallist[index] = letters[value]
Solution 2
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.
Kai036
Updated on April 11, 2020Comments
-
Kai036 about 4 years
I currently have some code that reads like this:
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]
What I want to happen is the for loop to iterate through
vallist
and replace any value that is greater than 10 with its corresponding letter. However, my current code just changesi
and not the original value in the list. For example, ifrd1
is set to 15, the code runs through andi
is set to"F"
, butrd1
does not change to"F"
, and instead just stays as 15. How can I fix this? -
Splines over 3 yearsI think this statement is not correct: "[...] the variable
i
is assigned with just a copy of the value of an item invallist
, [...]". According to Ned Batchelder's guide "Assignment never copies data". A for-loop is an assignment as well; in this case it makesi
refer to a value already referenced by an item invallist
. It's the linei = letters[i]
where nowi
refers to another value, in this case the value ofletters[i]
, e.g. the string "A". There is no copying involved in the author's code example.