更新for循环中的range()函数

时间:2014-12-06 16:38:12

标签: python-2.7 iteration

我有以下伪代码。

for j in range(0, len(list)):
    xx
    xx
    if something == True:
        list.append("x")

每次j遍历代码块时都会调用range(0, len(list)),因此它的最大值会更新吗?

我试着查看堆栈数据,但是我无法弄明白。

4 个答案:

答案 0 :(得分:2)

不,因为range(0, len(list))在开头创建一次以创建列表(或python 3中的迭代器),然后它只是迭代(使用next或indexing)。它相当于:

list_of_nums = range(0, len(list))  # [0, 1, 2, 3, ...]
for i in list_of_nums:
    j = i[counter]
    ...

使用while循环,如:

j = 0
while j < len(list)):
    xx
    xx
    if something == True:
        list.append("x")
    j += 1

答案 1 :(得分:0)

迭代只被评估一次。由于Python 2.x上的range()返回固定结构,因此一旦循环开始,迭代将永远不会被修改。如果您需要更改迭代,那么您将不得不使用不返回固定结构的东西,例如迭代列表本身。

答案 2 :(得分:0)

range创建一个包含两个参数之间所有元素的列表 - 没有任何神奇之处。一旦创建了结果,如果修改了给range的参数,就不会修改它,就像任何其他函数一样。

len的值分配给临时变量会使这更加明显:

tempLen = len(list)
for j in range(0, tempLen):
    xx
    xx
    if something == True:
        list.append("x")

答案 3 :(得分:0)

没有。 range是一个内置函数。调用它会返回一个列表。 for语句保留range的第一个返回值,然后停止。请尝试以下方法:

l = ['a', 'b', 'c']
for j in range(0, len(l)):
    l.append(j)
    print j

它打印三行。

顺便说一下,将变量分配给list