对于列表中的x和list.insert导致无限循环

时间:2015-05-17 06:10:13

标签: python-2.7

我不知道这是不是一个错误,但为什么会导致无休止的循环呢?

>>> top_ports = [[1], [0.9], [0.8], [0.7], [0.6]]
>>> a = 2
>>> for x in top_ports:
...     if a > x[0]:
...             top_ports.insert(0,a)
... 

2 个答案:

答案 0 :(得分:2)

x表示top_ports内的迭代元素。但是当a > x[0]true时,会将一个元素添加到top_ports

top_ports.insert(0,a)

因为top_ports的长度不断增加,for循环永远不会终止。

你也可以通过更详细来检查这一点。在您的示例中,打印x始终会产生[1]。这是因为当循环继续执行时,a总是在添加,如下所示:

[2, 2, 2, ... [1], [0.9], [0.8], [0.7], [0.6]]

for循环永远不会真正跳转到下一个元素,因为这些值也会移动另一个元素。

希望这能帮到你!

答案 1 :(得分:1)

在循环内部,您在列表中插入当前正在循环处理的新项目。您必须将代码更改为如下所示

>>> result = []
>>> top_ports = [[1], [0.9], [0.8], [0.7], [0.6]]
>>> a = 2
>>> for x in top_ports:
...     if a > x[0]:
...             result.insert(0,a)
...