Changing the value of range during iteration in Python

痴心易碎 提交于 2019-12-02 11:33:23

You can't change the range after it's been generated. In Python 2, range(k) will make a list of integers from 0 to k, like this: [0, 1, 2, 3, 4, 5, 6, 7]. Changing k after the list has been made will do nothing.

If you want to change the number to iterate to, you could use a while loop, like this:

k = 8
i = 0
while i < k:
    print i
    k -= 3
    i += 1

The expression range(k) is evaluated just once, not on every iteration. You can't set k and expect the range(k) result to change, no. From the for statement documentation:

The expression list is evaluated once; it should yield an iterable object.

You can use a while loop instead:

i = 0
k = 8
while i < k:
    print i
    i += 1
    k -= 3

A while loop does re-evaluate the test each iteration. Referencing the while statement documentation:

This repeatedly tests the expression and, if it is true, executes the first suite

If you do want to change k and affect the loop you need to make sure you are iterating over mutable object. For example:

k = list(range(8))
for i in k:
        print(i)
        k.pop()
        k.pop()
        k.pop()
        print(k)

Or alternatively:

k = list(range(8))
for i in k:
        print(i)
        k[:] = k[:-3]
        print(k)

Both will result with

0
[0, 1, 2, 3, 4]
1
[0, 1]
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!