Python动态循环终止变量

时间:2012-12-22 18:57:06

标签: python for-loop

我想在下面的代码中将2个附加到列表'a',直到它达到10的大小。但是,它不按我希望的方式工作。我错过了什么?

a = [1,2]

for ctr in range(0,len(a)):
    print ctr
    if len(a) < 10:
        a.append(2)

4 个答案:

答案 0 :(得分:4)

你只循环两次; len(a) 评估以创建range(),而不是在循环的每次迭代中。因此,您最终只得到一个长度为4的列表。

改为使用while语句:

while len(a) < 10:
    a.append(2)

.extend()2 s的正确数量:

a.extend([2] * (10 - len(a)))

或使用+=.extend()的简称):

a += [2] * (10 - len(a))

这两种方法都完全避免了循环。

答案 1 :(得分:3)

循环开始时,

range(len(a))被评估一次。此时,您的列表有两个项目,因此循环将执行两次。

要做你想做的事,一个更好的方法是:

a += [2] * (10 - len(a))

您知道要添加多少项,因此请一次性添加所有项目,而不是在循环中一次添加一项。

答案 2 :(得分:2)

只需做一个while循环,直到你想要的大小:

a = [1,2]
while len(a) < 10:
    a.append(2)

问题是您的原始循环基于a的当前大小。评估时,它只会循环2次。另一方面,while循环将继续每次评估该长度。

答案 3 :(得分:1)

只是为了完整性而采用另一种方法......(并且可能更灵活地填补其他迭代中的值等...)

>>> from itertools import chain, islice, repeat
>>> list(islice(chain(a, repeat(2)), 10))
[1, 2, 2, 2, 2, 2, 2, 2, 2, 2]