4

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.

eyllanesc
  • 235,170
  • 19
  • 170
  • 241
Horst
  • 292
  • 2
  • 14

3 Answers3

10
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.

Amadan
  • 191,408
  • 23
  • 240
  • 301
2

you should use steps in your range:

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

output:

2
4
6
8
10
LinPy
  • 16,987
  • 4
  • 43
  • 57
2

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
VPfB
  • 14,927
  • 6
  • 41
  • 75