【发布时间】:2021-08-16 11:44:09
【问题描述】:
我需要对生成器(不是列表)进行嵌套迭代。 我需要的是执行这样的事情:
testing 3 ...
Testing passed!
Starting subtest:
Sub-testing 4 with 3
Sub-testing passed!
testing 4 ...
testing 5 ...
testing 6 ...
Testing passed!
Starting subtest:
Sub-testing 7 with 6
Sub-testing 8 with 6
Sub-testing 9 with 6
Sub-testing passed!
testing 7 ...
testing 8 ...
testing 9 ...
Testing passed!
Starting subtest:
Sub-testing 10 with 9
Sub-testing 11 with 9
Sub-testing 12 with 9
Sub-testing passed!
testing 10 ...
所以我尝试了以下代码,使用 for 循环:
from itertools import *
princ_iter = count(3)
for x in princ_iter:
print("testing ", x, "...")
if x % 3 == 0:
print("Testing passed!")
print(" Starting subtest:")
princ_iter, nested_iter = tee(princ_iter)
for y in nested_iter:
print(" Sub-testing", y, " with ", x)
if y % (x//2) == 0:
print(" Sub-testing passed!")
break
但它不起作用,因为主迭代器 (princ_iter) 与嵌套的迭代器 (nested_iter) 一起迭代,我得到了这个输出:
testing 3 ...
Testing passed!
Starting subtest:
Sub-testing 4 with 3
Sub-testing passed!
testing 5 ...
testing 6 ...
Testing passed!
Starting subtest:
Sub-testing 4 with 6
Sub-testing 7 with 6
Sub-testing 8 with 6
Sub-testing 9 with 6
Sub-testing passed!
testing 10 ...
testing 11 ...
所以我尝试在 while 循环中使用相同的指令:
from itertools import *
princ_iter= count(3)
while True:
x = next(princ_iter)
print("testing ", x, "...")
...
这一次我得到了我正在寻找的输出!
为什么两条指令之间会有这种差异?有没有(更好的)使用 for 循环的方法?
【问题讨论】:
-
不要使用
iter或任何其他内置函数的名称作为变量的名称。
标签: python for-loop while-loop iterator itertools