我希望下面的代码将 2 附加到列表 'a' 直到它的大小为 10。但是,它并没有按我希望的方式工作。我错过了什么?
a = [1,2]
for ctr in range(0,len(a)):
print ctr
if len(a) < 10:
a.append(2)
你只循环两次;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))
这两种方法都完全避免了循环。
range(len(a))
在循环开始时评估一次。此时,您的列表有两个项目,因此循环将准确执行两次。
做你想做的事,更好的方法是:
a += [2] * (10 - len(a))
您知道要添加多少项,因此一次添加所有项,而不是循环中一次添加一项。
只需执行一个 while 循环,直到它达到您想要的大小:
a = [1,2]
while len(a) < 10:
a.append(2)
问题是您将原始循环基于a
. 当它评估时,它只会循环 2 次。while
另一方面,循环每次都会继续评估该长度。
只是为了完整性而采用另一种方法......(并且可能更灵活地从其他可迭代对象中填充值等......)
>>> from itertools import chain, islice, repeat
>>> list(islice(chain(a, repeat(2)), 10))
[1, 2, 2, 2, 2, 2, 2, 2, 2, 2]