Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 拆分生成器,独立处理并再次压缩_Python_Generator - Fatal编程技术网

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)来代替使用单个进程,并对数据使用相同的方法。