我希望下面的代码将 2 添加到列表“a”中,直到它的大小达到 10。但是,它并没有按照我希望的方式工作。我错过了什么?
a = [1,2]
for ctr in range(0,len(a)):
print ctr
if len(a) < 10:
a.append(2)
您只循环两次;
len(a)
only 被评估来创建 range()
,而不是在循环的每次迭代中。因此,您最终只会得到长度为 4 的列表。
使用
while
语句代替:
while len(a) < 10:
a.append(2)
或
.extend()
以及正确数量的 2
:
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]