Itertools.count Python

时间:2018-01-31 16:39:51

标签: python count itertools

我正在考虑datacamp tutorial,我想知道是否有人可以解释为什么这段代码会打印出最多11个的ODD数字?我在考虑每个next()调用序列中的步骤,但是如果我按照这个想法,第一个打印应该是数字2(count(0)在它第一次打到while时然后打印时转到count(1) ,它应该计算(2)。

TIA。

from itertools import count
sequence = count(start=0, step=1)
while(next(sequence) <= 10):
    print(next(sequence))

1 3 五 7 9 11

3 个答案:

答案 0 :(得分:7)

正如名称所示,

next(sequence)将获得所提供序列中的下一个元素。

获得一个元素之后,对next(sequence)的进一步调用只会在那个之后产生 next 数字(假设我们正在重复使用相同的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

在您的代码中,您在while条件下调用next(sequence),然后在next(sequence)函数调用print,因此两个值都不同。基本上,由于next调用在whileprint之间交替显示,您会看到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也在那里,只需在print循环之前添加一个while语句:

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)

答案 1 :(得分:0)

您需要从1开始才能获得所需的输出:

sequence = count(start=1, step=1)
while(next(sequence) <= 10):
    print(next(sequence))

2
4
6
8
10

答案 2 :(得分:0)

这只是代码的修改版本,可以生成相同的输出 我已经添加了关于代码为何以特定方式工作的注释

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)