所有自然数的惯用列表
Idiomatic list of all natural numbers
我正在尝试创建一个生成器,它将 return 自然数按顺序排列。这用于枚举另一个将在 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:
似乎不符合 Python 规范。
是否有标准库函数来迭代自然数?
要回答您的字面问题,请使用 itertools.count()
。它将从 start
值开始增加 step
,直到无穷大。
话虽如此,看来你真正想做的是:
for idx, item in enumerate(my_generator):
q.put((idx, item))
您有几个简单的选择。
使用大号 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)
我正在尝试创建一个生成器,它将 return 自然数按顺序排列。这用于枚举另一个将在 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:
似乎不符合 Python 规范。
是否有标准库函数来迭代自然数?
要回答您的字面问题,请使用 itertools.count()
。它将从 start
值开始增加 step
,直到无穷大。
话虽如此,看来你真正想做的是:
for idx, item in enumerate(my_generator):
q.put((idx, item))
您有几个简单的选择。
使用大号 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)