如何将一个迭代器一分为二?

直流电

您如何将一个迭代器一分为二而不进行两次迭代或使用额外的内存来存储所有数据?

可以将所有内容存储在内存中的解决方案:

l = [{'a': i, 'b': i * 2} for i in range(10)]
def a(iterator):
    for item in iterator:
        print(item)
def b(iterator):
   for item in iterator:
        print(item)

a([li['a'] for li in l])
b([li['b'] for li in l])

或者如果您可以重复两次,

class SomeIterable(object):
    def __iter__(self):
        for i in range(10):
            yield {'a': i, 'b': i * 2}


def a(some_iterator):
    for item in some_iterator:
        print(item)


def b(some_iterator):
    for item in some_iterator:
        print(item)


s = SomeIterable()

a((si['a'] for si in s))
b((si['b'] for si in s))

但是,如果我只想迭代一次,该怎么做呢?

user2357112支持Monica

从澄清的意见,ab为外部库函数,你不能重写,但它的好交错它们的执行。在那种情况下,您想要的是可能的,但是几乎需要线程:

import multiprocessing.pool # for ThreadPool, not multiprocessing
import Queue

_endofinput = object()

def _queueiter(queue):
    while True:
        item = queue.get()
        if item is _endofinput:
            break
        yield item

def parallel_execute(funcs, iterable, maxqueue):
    '''Interleaves the execution of funcs[0](iterable), funcs[1](iterable), etc.

    No function is allowed to lag more than maxqueue items behind another.
    (This will require adjustment if a function might return before consuming
    all input.)

    Makes only one pass over iterable.

    '''

    queues = [Queue.Queue(maxsize=maxqueue) for func in funcs]
    queueiters = [_queueiter(queue) for queue in queues]
    threadpool = multiprocessing.pool.ThreadPool(processes=len(funcs))

    results = threadpool.map_async(lambda (f, x): f(x), zip(funcs, queueiters))

    for item in iterable:
        for queue in queues:
            queue.put(item)

    for queue in queues:
        queue.put(_endofinput)

    threadpool.close()
    return results.get()

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何将一个数字一分为二,每个数字都在一个范围内?

来自分类Dev

如何将一张桌子一分为二

来自分类Dev

如何将列表元素一分为二?

来自分类Dev

在已经提交更改之后,如何将提交一分为二

来自分类Dev

如何将句子一分为二?

来自分类Dev

如何将变量一分为二?

来自分类Dev

如何将.mp4一分为二?

来自分类Dev

Windows 10:如何将屏幕一分为二?

来自分类Dev

将php数组一分为二

来自分类Dev

将PDF页面一分为二

来自分类Dev

将 CSV 列一分为二

来自分类Dev

如何将大数据集一分为二以使用Tensorflow.js进行验证?

来自分类Dev

将显示器一分为二

来自分类Dev

如何基于行开始将拆分文件一分为二?

来自分类Dev

如何使用Git将分支一分为二?

来自分类Dev

如何以pythonic方式将元组一分为二

来自分类Dev

如何基于行开始将拆分文件一分为二?

来自分类Dev

如何使用LVM将crypt_LUKS分区一分为二?

来自分类Dev

如何制作将惰性列表一分为二的函数?

来自分类Dev

从初始提交一分为二

来自分类Dev

将一行一分为二

来自分类Dev

我想输出两个将屏幕一分为二的大模态

来自分类Dev

如何将MySQL字段一分为二并比较两个字段之间的字符串?

来自分类Dev

Python 2.7.6将单个“高” unicode代码点一分为二

来自分类Dev

Android MVVM设计-我应该将viewmodel类一分为二吗?

来自分类Dev

Python 2.7.6将单个“高” unicode代码点一分为二

来自分类Dev

在模式之前将文件一分为二

来自分类Dev

使用jQuery或CSS将表格一分为二

来自分类Dev

将google-vision框架一分为二