for 循环将列表扩展到特定长度

问题描述 投票:0回答:4

我希望下面的代码将 2 添加到列表“a”中,直到它的大小达到 10。但是,它并没有按照我希望的方式工作。我错过了什么?

a = [1,2]

for ctr in range(0,len(a)):
    print ctr
    if len(a) < 10:
        a.append(2)
python for-loop
4个回答
4
投票

您只循环两次;

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))

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


3
投票
当循环开始时,

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

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

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

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


2
投票

只需执行 while 循环,直到达到您想要的大小:

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

问题在于您的原始循环基于

a
的当前大小。当它求值时,它只会循环2次。另一方面,
while
循环每次都会继续评估该长度。


1
投票

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

>>> from itertools import chain, islice, repeat
>>> list(islice(chain(a, repeat(2)), 10))
[1, 2, 2, 2, 2, 2, 2, 2, 2, 2]
© www.soinside.com 2019 - 2024. All rights reserved.