列表的排列组合

21 投票
6 回答
13698 浏览
提问于 2025-04-16 07:23

我有一个这样的列表:

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) 来替代。

撰写回答