如何在生产发电机时平衡产量?

时间:2017-01-03 18:30:05

标签: python iterator return yield

我有这个功能g()我的目标是产生类似于product()的结果,但每组字符的外观数量有限。因此,在下面的代码中,而不是product(a, repeat=3) g()应该产生所有组合,其中来自a的字符出现2次,b中的字符出现1次。这就是我所拥有的:

from itertools import permutations, product

a='ABC'
b=['*', '%3A']
l=[a]*2+[b]

def g(list):
    for p in permutations(list):
        yield product(*p)


result=g(l)

所以我遇到的问题是,当我yield结果时,我得到了一个使用起来很痛苦的嵌套迭代器,当我使用return时,它只返回对应于第一个循环转向的生成器就像我做的那样:g()仅由def g(): return product(*next(permutations(list)))组成。

1 个答案:

答案 0 :(得分:3)

如果你是python 3.3或更高版本,你可以使用PEP 380: Syntax for Delegating to a Subgenerator ...只做equals()

yield from