相关疑难解决方法(0)

将发电机拆分成块而不预先行走

(这个问题与这一个这个问题有关,但那些是预先走动的发电机,这正是我想要避免的)

我想把一个发电机拆分成块.要求是:

  • 不填充块:如果剩余元素的数量小于块大小,则最后一个块必须更小.
  • 不要事先走动发电机:计算元件是昂贵的,而且只能通过消耗功能来完成,而不是通过消耗器来完成
  • 这意味着,当然:不要累积在内存中(没有列表)

我试过以下代码:

def head(iterable, max=10):
    for cnt, el in enumerate(iterable):
        yield el
        if cnt >= max:
            break

def chunks(iterable, size=10):
    i = iter(iterable)
    while True:
        yield head(i, size)

# Sample generator: the real data is much more complex, and expensive to compute
els = xrange(7)

for n, chunk in enumerate(chunks(els, 3)):
    for el in chunk:
        print 'Chunk %3d, value %d' % (n, el)
Run Code Online (Sandbox Code Playgroud)

这有点工作:

Chunk   0, value 0
Chunk   0, value 1 …
Run Code Online (Sandbox Code Playgroud)

python generator

47
推荐指数
4
解决办法
1万
查看次数

标签 统计

generator ×1

python ×1