我想在下面的代码中将2个附加到列表'a',直到它达到10的大小。但是,它不按我希望的方式工作。我错过了什么?
a = [1,2]
for ctr in range(0,len(a)):
print ctr
if len(a) < 10:
a.append(2)
答案 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]