列表列表的排列

2024-04-18 21:42:33 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一张这样的单子:

l = [['a', 'b', 'c'], ['a', 'b'], ['g', 'h', 'r', 'w']]

我想从每个列表中选择一个元素,并将它们组合成一个字符串。

例如:“aag”、“aah”、“aar”、“aaw”、“abg”、“abh”。。。。

但是,在程序运行之前,列表l的长度和每个内部列表的长度都是未知的。那我要怎么做?


Tags: 字符串程序运行元素列表单子aaraawabg
3条回答

取一个previous solution并改用itertools.product(*l)

使用itertools非常简单。产品:

>>> import itertools
>>> list(itertools.product("abc", "ab", "ghrw"))
[('a', 'a', 'g'), ('a', 'a', 'h'), ('a', 'a', 'r'), ('a', 'a', 'w'), ('a', 'b', 'g'), ('a', 'b', 'h'), ('a', 'b', 'r'), ('a', 'b', 'w'), ('b', 'a', 'g'), ('b', 'a', 'h'), ('b', 'a', 'r'), ('b', 'a', 'w'), ('b', 'b', 'g'), ('b', 'b', 'h'), ('b', 'b', 'r'), ('b', 'b', 'w'), ('c', 'a', 'g'), ('c', 'a', 'h'), ('c', 'a', 'r'), ('c', 'a', 'w'), ('c', 'b', 'g'), ('c', 'b', 'h'), ('c', 'b', 'r'), ('c', 'b', 'w')]

如果有人对算法感兴趣,这里有一个非常简单的方法来使用递归来查找组合:

 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)

相关问题 更多 >