组合类型的递归解决方案(在python中)

时间:2015-09-06 09:22:52

标签: python recursion

是否存在针对以下问题的递归解决方案: 对于给定的列表列表,应计算这些列表成员的所有组合,例如:

[list('123'), list('ABCD'), list('ab')]

将产生:

 ['a', 'A', '1']
 ['a', 'A', '2']
 ['a', 'A', '3']
 ['a', 'B', '1']
 ['a', 'B', '2']
 ['a', 'B', '3']
 ['a', 'C', '1']
 ['a', 'C', '2']
 ['a', 'C', '3']
 ['a', 'D', '1']
 ['a', 'D', '2']
 ['a', 'D', '3']
 ['b', 'A', '1']
 ['b', 'A', '2']
 ['b', 'A', '3']
 ['b', 'B', '1']
 ['b', 'B', '2']
 ['b', 'B', '3']
 ['b', 'C', '1']
 ['b', 'C', '2']
 ['b', 'C', '3']
 ['b', 'D', '1']
 ['b', 'D', '2']
 ['b', 'D', '3']

以下迭代程序生成以上输出:

rec = [list('123'), list('ABCD'), list('ab')]
done = False
vect = [0 for i in rec]
while not done:
    pass
    for j in range(len(rec[0])):
        vect[0] = j
        print [rec[i][vect[i]] for i in range(len(rec))][::-1]
    c = not False
    for k in range(1, len(rec)):
        if c:
            c = (vect[k]+c) >= len(rec[k])
            if c:
                vect[k] = 0
            else:
                vect[k] += 1
    if c:
        done = True

但是我正在寻找一种可能更短且更具可读性的递归解决方案?

1 个答案:

答案 0 :(得分:0)

你可以尝试这个(不是递归但非常紧凑,可能是你能做到的最有效率):

0,0

输出:

from itertools import product

for item in product('123', 'ABCD', 'ab'):
    print(item)