Why can't "i" be manipulated inside for-loop

Viewed 228

Why does:

for i in range(10):
 i += 1
 print(i)

return:

1
2
3
4
5
6
7
8
9
10

instead of:

2
4
6
8
10

?

Here would be some details if any more were necessary.

3 Answers
for i in range(10):
    i += 1
    print(i)

is equivalent to

iterator = iter(range(10))
try:
    while True:
        i = next(iterator)
        i += 1
        print(i)
except StopIteration:
    pass

The iterator that iter(range(10)) produces will yield values 0, 1, 2... 8 and 9 each time next is called with it, then raise StopIteration on the 11th call.

Thus, you can see that i gets overwritten in each iteration with a new value from the range(10), and not incremented as one would see in e.g. C-style for loop.

you should use steps in your range:

for i in range(2,11,2):
    print(i)

output:

2
4
6
8
10

i is assigned at each loop iteration overwriting any changes done to its value.

for i in range(10):
    i += 1
    print(i)

is equivalent to:

 i = 0 # first iiteration
 i += 1
 print(i)

 i = 1 # second iiteration
 i += 1
 print(i)

 i = 2 # third iiteration
 i += 1
 print(i)

 # etc up to i = 9
Related