Python 拆分生成器,独立处理并再次压缩
我该怎么做Python 拆分生成器,独立处理并再次压缩,python,generator,Python,Generator,我该怎么做 sample_generator = get_sample_generator() # This generator yields tuples (label(i), data(i)) label_generator = ??? data_generator = ??? processed_data_generator = process_data_generator(data_generator) processed_sample_generator = zip(label
sample_generator = get_sample_generator() # This generator yields tuples (label(i), data(i))
label_generator = ???
data_generator = ???
processed_data_generator = process_data_generator(data_generator)
processed_sample_generator = zip(label_generator, processed_data_generator) # Labels and corresponding data again as tupel (label(i), processed_data(i))
显然,我不能将样本生成器映射到标签和数据生成器中,因为两者都会将样本生成器向前移动…使用
tee
复制原始生成器,然后拆分其中一个副本以仅获取数据
sample1, sample2 = itertools.tee(sample_generator, 2)
processed_data_generator = process_data_generator(d for (l,d) in sample1)
processed_sample_generator = sample2
使用
tee
复制原始生成器,然后拆分其中一个副本以仅获取数据
sample1, sample2 = itertools.tee(sample_generator, 2)
processed_data_generator = process_data_generator(d for (l,d) in sample1)
processed_sample_generator = sample2
使用
itertools.tee
将发电机分成两部分。您仍然需要单独的进程来分割结果值
from itertools import count
def generator():
for c in count():
yield 'label {}'.format(c), 'data {}'.format(c)
from itertools import tee
label_generator, data_generator = tee(generator())
print("labels:")
for _ in range(5):
print(next(label_generator)[0])
print()
print("data:")
for _ in range(5):
print(next(data_generator)[1])
使用
itertools.tee
将发电机分成两部分。您仍然需要单独的进程来分割结果值
from itertools import count
def generator():
for c in count():
yield 'label {}'.format(c), 'data {}'.format(c)
from itertools import tee
label_generator, data_generator = tee(generator())
print("labels:")
for _ in range(5):
print(next(label_generator)[0])
print()
print("data:")
for _ in range(5):
print(next(data_generator)[1])
展平
sample\u generator
,并将label\u generator
和data\u generator
从中取出:
import itertools
label_generator = data_generator = itertools.chain.from_iterable(sample_generator)
展平
sample\u generator
,并将label\u generator
和data\u generator
从中取出:
import itertools
label_generator = data_generator = itertools.chain.from_iterable(sample_generator)
它是否太大而无法从中创建列表?从这个意义上讲,您不能拆分生成器。要访问两元素元组的第二项,您需要使用
sample\u generator
为什么要这样做?而且zip
不应该使用processed\u data\u generator
?您是对的。我改了。我有一个无法更改的现有API。这个API提供了process_data_generator(),这也是出于我自己的兴趣,我想知道这样的东西,可以很容易地用流实现(例如,反应式扩展),是否可以用生成器实现……它是否太大而无法从中创建列表?从这个意义上讲,您不能拆分生成器。要访问两元素元组的第二项,您需要使用sample\u generator
为什么要这样做?而且zip
不应该使用processed\u data\u generator
?您是对的。我改了。我有一个无法更改的现有API。这个API提供了过程数据生成器(),这也是出于我自己的兴趣,我想知道这样的东西,可以很容易地用流实现(例如反应式扩展),是否可以用生成器实现……如果processed\u sample\u generator
与sample\u generator
一样,我认为它不是“processed”的很多…如果processed\u sample\u generator
与sample\u generator
完全相同,我认为它的“处理”程度不高…对于处理,我有一个现有的不可更改的API://@TimJoseph,这应该是很好的了解。无论如何,再看一看,我用一个完全不同的解决方案替换了我的解决方案。对于处理,我有一个现有的不可更改的API://@TimJoseph,这是很好的了解。无论如何,再看一次,我用一个完全不同的解决方案替换了我的解决方案。这似乎没问题。我想我也可以使用map(lamdax:x[0],label\u generator)
和同样的方法来处理数据,而不是使用单独的进程。这似乎没问题。我想我也可以使用map(lamdax:x[0],label\u generator)来代替使用单个进程,并对数据使用相同的方法。