列表的排列组合
我有一个这样的列表:
l = [['a', 'b', 'c'], ['a', 'b'], ['g', 'h', 'r', 'w']]
我想从每个子列表中选一个元素,然后把它们组合成一个字符串。
比如说:'aag', 'aah', 'aar', 'aaw', 'abg', 'abh' ....
不过,列表的长度和每个子列表的长度在程序运行之前都是未知的。那么我该怎么做才能实现我的想法呢?
6 个回答
2
使用递归
def permutenew(l):
if len(l)==1:
return l[0]
else:
lnew=[]
for a in l[0]:
for b in permutenew(l[1:]):
lnew.append(a+b)
return lnew
l = [['a', 'b', 'c'], ['a', 'b'], ['g', 'h', 'r', 'w']]
print permutenew(l)
7
如果有人对这个算法感兴趣,这里有一个非常简单的方法,可以通过递归来找到组合:
l = [['a', 'b', 'c'], ['a', 'b'], ['g', 'h', 'r', 'w']]
def permu(lists, prefix=''):
if not lists:
print prefix
return
first = lists[0]
rest = lists[1:]
for letter in first:
permu(rest, prefix + letter)
permu(l)
24
可以参考一个之前的解决方案,然后用 itertools.product(*l)
来替代。