Python如何同时迭代两个无限生成器?;
我想迭代一些无限的生成器:Python如何同时迭代两个无限生成器?;,python,python-2.x,Python,Python 2.x,我想迭代一些无限的生成器: def x(y): while True: for i in xrange(y): yield i for i,j in zip(x(5),x(3)): print i,j 上面的代码将不会产生任何结果。我做错了什么?zip不是生成器的正确工具。试试itertools.izip (或者更好的是,使用Python 3,在那里您的代码可以很好地工作-一旦您在打印中添加了括号)zip不是生成器的正确工具。试试ite
def x(y):
while True:
for i in xrange(y):
yield i
for i,j in zip(x(5),x(3)):
print i,j
上面的代码将不会产生任何结果。我做错了什么?
zip
不是生成器的正确工具。试试itertools.izip
(或者更好的是,使用Python 3,在那里您的代码可以很好地工作-一旦您在
打印
中添加了括号)zip
不是生成器的正确工具。试试itertools.izip
(或者更好的是,使用Python 3,在那里你的代码工作得很好-一旦你在
打印
中添加了括号)这是因为Python 2zip
试图通过获取生成器将产生的所有元素来创建一个列表。您需要的是迭代器,即itertools.izip
在Python3中,zip类似于izip,这是因为Python2试图通过获取生成器将产生的所有元素来创建列表。您需要的是迭代器,即
itertools.izip
在Python3中,zip的工作原理与izip类似,只需使用zip的一个变体,它返回迭代器而不是列表。幸运的是,
itertools
模块中有一个
import itertools
def x(y):
while True:
for i in xrange(y):
yield i
for i,j in itertools.izip(x(5),x(3)):
print i,j
请注意,在Python3中,itertools.izip
不存在,因为香草zip
已经是一个迭代器
在itertools中也有一个函数,它在iterable上无限循环 生成一个迭代器,从iterable返回元素并保存 每份的复印件。当iterable耗尽时,从 保存的副本。无限期地重复
因此,
itertools.cycle(范围(5))
与您的x(5)
做相同的事情;您还可以将xrange(5)
传递到循环
,这并不繁琐 您只需要使用zip
的一个变体,它返回一个迭代器而不是列表。幸运的是,itertools
模块中有一个
import itertools
def x(y):
while True:
for i in xrange(y):
yield i
for i,j in itertools.izip(x(5),x(3)):
print i,j
请注意,在Python3中,itertools.izip
不存在,因为香草zip
已经是一个迭代器
在itertools中也有一个函数,它在iterable上无限循环 生成一个迭代器,从iterable返回元素并保存 每份的复印件。当iterable耗尽时,从 保存的副本。无限期地重复
因此,
itertools.cycle(范围(5))
与您的x(5)
做相同的事情;您还可以将xrange(5)
传递到循环
,这并不繁琐 据我所知,您试图同时迭代两个迭代器。如果没有其他办法,您可以始终使用while循环
gen1 = x(5)
gen2 = x(3)
while True:
try:
print(next(gen1), next(gen2))
except StopIteration:
break
如果您使用python3.4及更高版本,那么您的函数x也可以重构-
def x(y):
yield from xrange(y)
据我所知,您试图同时迭代两个迭代器。如果没有其他办法,您可以始终使用while循环
gen1 = x(5)
gen2 = x(3)
while True:
try:
print(next(gen1), next(gen2))
except StopIteration:
break
如果您使用python3.4及更高版本,那么您的函数x也可以重构-
def x(y):
yield from xrange(y)
你能在两个单独的线程中完成吗?
从itertools导入izip作为zip
@BurhanKhalid:或从future\u builtins导入zip
。不错。需要跟上这些。你能在两个单独的线程中完成吗?从itertools导入izip作为zip
@BurhanKhalid:或从future\u builtins导入zip
。不错。我们需要跟上这些。