Can’t modify list elements in a loop [duplicate]

Because the way for i in li works is something like this:

for idx in range(len(li)):
    i = li[idx]
    i = 'foo'

So if you assign anything to i, it won’t affect li[idx].

The solution is either what you have proposed, or looping through the indices:

for idx in range(len(li)):
    li[idx] = 'foo'

or use enumerate:

for idx, item in enumerate(li):
    li[idx] = 'foo'

Leave a Comment