创建无限循环

时间:2019-04-23 10:55:04

标签: python loops

我想测试python是否可以让我运行以下代码:

listWords = []
for i in range (len(listWords)+1):
    listWords.append("New word")
print ("End loop")

原因是我想创建一个尝试解决解决方案的程序,然后将新项目添加到列表中进行测试。

当我向列表中添加新项时,为什么python不更新for循环范围?

使用for循环可以解决此问题吗? (我怀疑一会儿循环会适合我的情况,但我只是很好奇)

谢谢

2 个答案:

答案 0 :(得分:2)

遍历要同时更新的列表是不好的做法。

在您的代码中,运行循环之前已经计算了范围,因此范围将为range(1),然后for循环仅运行一次并停止。如果listWords不为空,而是listWords = ['a','b'],也可以观察到这一点,因此由于迭代器为range(3)

,因此在循环下面运行了3次。

然后代码变为。

listWords = ['a','b']
for i in range (len(listWords)+1):
    listWords.append("New word")
print ("End loop")
print(listWords)
['a', 'b', 'New word', 'New word', 'New word']

虽然循环没有这种限制,但由于len(listWords)总是在下一次迭代结束时更新,因此以下示例将继续运行

listWords = []
i = 0
while i <  (len(listWords)+1):
    listWords.append("New word")
    i+=1

答案 1 :(得分:1)

如前所述,在迭代列表时更新列表通常不是一个好主意。但是,在这种情况下,这正是您想要执行的操作。与其在迭代列表之前 计算列表的len(这就是为什么它从不更新的原因),而是可以直接迭代列表中的元素。

>>> lst = [1,2,3]
>>> for x in lst:
...     if x < 10:
...         lst.append(x*2)
...         
>>> lst
[1, 2, 3, 2, 4, 6, 4, 8, 12, 8, 16, 16]

如果需要当前元素的索引(或索引和元素本身),可以使用for i, x in enumerate(lst)来达到相同的效果。