将一对发电机转变为一对发电机

asa*_*ica 7 python tuples generator

我如何转换成对的生成器(元组):

tuple_gen = (i for i in [(1, "a"), (2, "b"), (3, "c")])
Run Code Online (Sandbox Code Playgroud)

成两个发电机,会产生[1, 2, 3]["a", "b", "c"]

我需要单独处理元组的第一个和第二个元素,处理函数期望迭代.

生成器非常大(数百万项)所以我想避免在内存中同时存在所有项目,除非没有其他解决方案.

bow*_*bow 3

您可以n使用itertools 包中的tee函数创建不同的迭代器。然后您将分别迭代它们:

from itertools impor tee

i1, i2 = tee(tuple_gen, n=2)
firsts = (x[0] for x in i1)
seconds = (x[1] for x in i2)
Run Code Online (Sandbox Code Playgroud)

  • 问题在于,使用其中一个迭代器而不使用另一个迭代器会将流的全部内容转储到内存中。 (3认同)