是否存在针对以下问题的递归解决方案: 对于给定的列表列表,应计算这些列表成员的所有组合,例如:
[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
但是我正在寻找一种可能更短且更具可读性的递归解决方案?
答案 0 :(得分:0)
你可以尝试这个(不是递归但非常紧凑,可能是你能做到的最有效率):
0,0
输出:
from itertools import product
for item in product('123', 'ABCD', 'ab'):
print(item)