我拿着一个数据放大器教程,想知道是否有人能解释一下为什么这段代码会打印出11以下的奇数?我在考虑每个next()调用步骤,但是如果我遵循这个想法,第一个打印应该是数字2 (count(0)在它第一次命中时间时进入计数(1),然后当它打印时,它应该被计数(2)。
蒂娅。
from itertools import count
sequence = count(start=0, step=1)
while(next(sequence) <= 10):
print(next(sequence))1 3 5 7 9 11
发布于 2018-01-31 16:55:44
顾名思义,next(sequence)将在提供的序列中获得下一个元素。
一旦获得一个元素,对next(sequence)的进一步调用只会在该元素之后产生下一个数字(前提是我们重用相同的sequence)。
>>> sequence = count(start=0, step=1)
>>> next(sequence)
0
>>> next(sequence)
1
>>> next(sequence)
2注意,如果您重新生成序列,您将重新开始:
>>> sequence = count(start=0, step=1)
>>> next(sequence)
0
>>> next(sequence)
1
>>> sequence = count(start=0, step=1)
>>> next(sequence)
0在您的代码中,您将在then条件下调用next(sequence),然后为print函数调用next(sequence),因此这两个值将是不同的。基本上,当next调用在while和print之间交替时,您将看到print将打印出奇数值。
如果再添加一个next,您可以看到类似的行为
from itertools import count
sequence = count(start=0, step=1)
while(next(sequence) <= 10):
noop = next(sequence)
print(next(sequence))这将打印出2 5 8 11
如果要打印偶数,则可以:
从1开始计数
from itertools import count
sequence = count(start=1, step=1)
while(next(sequence) <= 10):
print(next(sequence))这将打印出2 4 6 8 10
或者,如果希望0也在那里,只需在while循环之前添加一个print语句:
from itertools import count
sequence = count(start=0, step=1)
print(next(sequence))
while(next(sequence) <= 10):
print(next(sequence))这将打印出0 2 4 6 8 10
如果要打印每个数字,只需保留next(sequence)的输出
from itertools import count
sequence = count(start=0, step=1)
element = next(sequence)
while(element <= 10):
print(element)
element = next(sequence)发布于 2018-01-31 16:54:19
您需要从1开始,以获得所需的输出:
sequence = count(start=1, step=1)
while(next(sequence) <= 10):
print(next(sequence))
2
4
6
8
10发布于 2018-01-31 16:54:49
这只是您的代码的一个修改版本,它产生了相同的输出,我添加了关于为什么代码以特定方式工作的注释。
from itertools import count
sequence = count(start=0, step=1)
# a has value count(0)
a=next(sequence)
while(a <= 10):
# b has value count(1) 3 5 and so on
b=next(sequence)
print(b)
# a has value count(2) 4 6 and so on
a=next(sequence)https://stackoverflow.com/questions/48547126
复制相似问题