所有自然数字的惯用列表

时间:2015-08-13 21:52:43

标签: python numbers generator idiomatic

我正在尝试创建一个生成器,它将按顺序返回自然数。这用于枚举另一个将在StopIteration上退出的生成器,这似乎是最简单的方法。但是,我找不到创建这个生成器的惯用方法:

def numbers():
    i = 0
    while True:
        yield i
        i += 1

q = Queue.Queue()
for i in numbers():
    try:
        q.put((i, my_generator.next()))
    except StopIteration:
        break

这确实有效,但以这种方式使用while True:似乎是单声道的。

是否有标准库函数来迭代自然数?

2 个答案:

答案 0 :(得分:3)

要回答您的文字问题,请使用itertools.count()。它会从startstep计算到无穷大。

那就是说,你真正想做的就是:

for idx, item in enumerate(my_generator):
    q.put((idx, item))

答案 1 :(得分:0)

你有几个简单的选择。

使用较大的range()

q = Queue.Queue()
for i in range(10**10):
    try:
        q.put((i, my_generator.next()))
    except StopIteration:
        break

或者只是enumerate()您真正感兴趣的生成器:

q = Queue.Queue()
for item in enumerate(my_generator):
    q.put(item)