我有以下伪代码。
for j in range(0, len(list)):
xx
xx
if something == True:
list.append("x")
每次j遍历代码块时都会调用range(0, len(list))
,因此它的最大值会更新吗?
我试着查看堆栈数据,但是我无法弄明白。
答案 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
是 。