python - Pythonic 方式的递归生成器?

标签 python functional-programming

下面是一个生成器,它可以创建由多个字符串中的一个字符组成的所有组合:

('ab', 'cd', 'ef') => 'ace', 'acf', 'ade', 'adf', 'bce', 'bcf', 'bde', 'bdf'.

但是,我想知道这是否可以用更 Pythonic 的方式完成。

# Example input data
t = ('ab', 'cd', 'ef')

# Recursive generator
def comb(t):
    if t:
        for c in t[0]:
            for s in comb(t[1:]):
                yield c + s 
    else:
        yield ''

# Test of generator
for r in comb(t):
    print(r)

最佳答案

您可以使用 itertools.product:

>>> from itertools import product
>>> lis = ('ab', 'cd', 'ef')
for p in product(*lis):
    print "".join(p)
...     
ace
acf
ade
adf
bce
bcf
bde
bdf

关于python - Pythonic 方式的递归生成器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18657935/

相关文章:

python - 如何使正则表达式忽略特定组之后的模式

javascript - 为什么这个柯里化(Currying)的方法需要用一个函数来包装?

javascript - 如何将when.map与node.lift-ed函数一起使用?

list - 如何在Mathematica中使用函数式编程减去列表中的特定元素?

python - 为什么后来声明的小部件首先出现?

python - 如何制作 mask 以将除文本以外的所有图像背景设置为白色?

python - 内核 pca 参数用法 : kernel and fit_inverse_transform

python - ansible 命令仅使用绝对路径运行

haskell - 获取列表中间元素的最有效方法是什么?

functional-programming - worker 用组合器的解释