Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Change values in a list using a for loop (python)

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 changes i and not the original value in the list. For example, if rd1 is set to 15, the code runs through and i is set to "F", but rd1 does not change to "F", and instead just stays as 15. How can I fix this?

like image 338
Kai036 Avatar asked Mar 03 '19 22:03

Kai036


People also ask

How do you change a value in a for loop in Python?

Python for loop change value of the currently iterated element in the list example code. Or you can use list comprehensions (or map ), unless you really want to mutate in place (just don't insert or remove items from the iterated-on list). Use a for-loop and list indexing to modify the elements of a list.

Can you modify a list while in a for loop?

The general rule of thumb is that you don't modify a collection/array/list while iterating over it. Use a secondary list to store the items you want to act upon and execute that logic in a loop after your initial loop.

Can you use a for loop in a list Python?

In Python, we can loop over list elements with for and while statements, and list comprehensions.


2 Answers

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]
like image 130
blhsing Avatar answered Oct 13 '22 01:10

blhsing


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.

like image 21
Georges Lorré Avatar answered Oct 12 '22 23:10

Georges Lorré