在生产发电机时,如何使产量趋于平缓?

2024-03-28 18:08:15 发布

您现在位置:Python中文网/ 问答频道 /正文

我有这个函数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)))组成。你知道吗


Tags: 函数代码fromimport目标数量returndef
1条回答
网友
1楼 · 发布于 2024-03-28 18:08:15

如果您是Python3.3或更高版本,您可以使用PEP 380: Syntax for Delegating to a Subgenerator。。。只要做yield from

from itertools import permutations, product

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

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


result=g(l)

相关问题 更多 >