代码之家  ›  专栏  ›  技术社区  ›  Yuval Adam

python中的嵌套生成器函数

  •  2
  • Yuval Adam  · 技术社区  · 15 年前

    考虑一个元组 v = (a,b,c) 以及一个生成器函数 generate(x) 它从元组接收一个项并为每个项生成多个选项。

    什么是pythonic方法来产生一组所有可能的组合结果 生成(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 回复  |  直到 15 年前
        1
  •  8
  •   Ayman Hourieh    15 年前

    Python2.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
    

    从文档中:

    输入可数的笛卡尔积。

    相当于 生成器表达式。例如, 产品(A,B)返回与 (x,y)代表x在a代表y在b)。