Python中的嵌套生成器函数

2 投票
1 回答
1582 浏览
提问于 2025-04-15 21:10

考虑一个元组 v = (a,b,c) 和一个生成器函数 generate(x),这个函数会接收元组中的一个元素,并为每个元素生成多个选项。

那么,如何用Python的方式生成所有可能的组合,基于 generate(x) 对元组中每个元素的结果呢?

我可以这样做:

v = (a,b,c)
for d in generate(v[0]):
    for e in generate(v[1]):
        for f in generate(v[2]):
            print d,e,f

但是这样看起来太丑了,而且我需要一个通用的解决方案。

1 个回答

8

Python 2.6 有一个叫做 itertools.product() 的函数,可以实现你想要的功能:

import itertools
v = (a, b, c)
for d, e, f in itertools.product(*(generate(x) for x in v)):
  print d, e, f

根据文档的说明:

这个函数可以计算输入的可迭代对象(比如列表、元组等)的笛卡尔积。

它的作用就像是嵌套的 for 循环在生成器表达式中的表现。例如,调用 product(A, B) 的结果和 ((x,y) for x in A for y in B) 是一样的。

撰写回答