条件满足时,Python while循环不会中断

时间:2019-12-18 12:33:14

标签: python while-loop syntax

我意识到我可能正在犯一些非常基本的语法错误,但是我在解决或搜索该问题时遇到了麻烦。

我希望在达到特定限制时停止进程。似乎是while循环的完美用例。但是...

test_list = []

integers = list(range(40))

while len(test_list) < 20:
    for i in integers:
        test_list.append(i)

这将遍历整个integers列表,而不是半途而废。

len(test_list) < 20现在返回false。达到条件时循环不应该中断吗?

2 个答案:

答案 0 :(得分:2)

由于在for循环的第一次迭代中执行了整个while循环,所以发生了错误。这将填充列表,然后在while循环的第二次迭代中检查条件。

这可以通过以下方法解决:

test_list = []

integers = list(range(40))

for i in integers:
    test_list.append(i)
    if len(test_list) >= 20:
        break

答案 1 :(得分:0)

正如已经指出的,while条件不会一直评估,而仅在控制流到达该点时(即for循环之前和之后)评估,而不是在两者之间评估。在这种情况下(结合whilefor),您可以改用itertools.takewhile

from itertools import takewhile
for i in takewhile(lambda _: len(test_list) < 20, integers):
    test_list.append(i)

只要(a)可迭代的元素更多,并且(b)条件成立,这将执行循环。因此,test_list最终以[0, 1, ..., 19]

但是,当然,在这种非常特殊情况下,您也可以执行test_list = integers[:20]