如何合并两个 python 迭代器?

新手上路,请多包涵

我有两个迭代器,一个 list 和一个 itertools.count 对象(即无限值生成器)。我想将这两个合并到一个生成的迭代器中,该迭代器将在两者之间交替产生值:

 >>> import itertools
>>> c = itertools.count(1)
>>> items = ['foo', 'bar']
>>> merged = imerge(items, c)  # the mythical "imerge"
>>> merged.next()
'foo'
>>> merged.next()
1
>>> merged.next()
'bar'
>>> merged.next()
2
>>> merged.next()
Traceback (most recent call last):
    ...
StopIteration

最简单、最简洁的方法是什么?

原文由 David Eyk 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 962
2 个回答

生成器将很好地解决您的问题。

 def imerge(a, b):
    for i, j in itertools.izip(a,b):
        yield i
        yield j

原文由 Pramod 发布,翻译遵循 CC BY-SA 2.5 许可协议

您可以做一些与@Pramod 最初建议的几乎完全相同的事情。

 def izipmerge(a, b):
  for i, j in itertools.izip(a,b):
    yield i
    yield j

这种方法的优点是如果 a 和 b 都是无限的,你就不会耗尽内存。

原文由 David Locke 发布,翻译遵循 CC BY-SA 2.5 许可协议

推荐问题