我意识到我可能正在犯一些非常基本的语法错误,但是我在解决或搜索该问题时遇到了麻烦。
我希望在达到特定限制时停止进程。似乎是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
。达到条件时循环不应该中断吗?
答案 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
循环之前和之后)评估,而不是在两者之间评估。在这种情况下(结合while
和for
),您可以改用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]
。