我如何解决这个排列编码问题?

How do I solve this permutation coding question?

我记得在 Leetcode 上见过一次,但不确定是哪一个。问题来了。

我有一个列表 ['a','b','c']。通过排列,我想得到各种可能的列表组合与给定列表的结果。

预计

result = [['a'],['b'],['c'],
          ['a','b'],['b','c'],['a','c'],
          ['a','b','c']]

如果['a','b','c','d'],应该是

result = [['a'],['b'],['c'],['d'],
          ['a','b'],['a','c'],['a','d'],['b','c'],['b','d'],['c','d'],
          ['a','b','c'],['a','b','d'],['a','c','d'],['b','c','d'],
          ['a','b','c','d'],
]

如果能从你们那里得到任何启发,我将不胜感激。

这道题需要输出本题的幂集,所以输出中总会有2^n个元素,'n'是初始列表中的元素个数,并且 2^n 将包括 phi,因此循环的限制可能是 2^n-1,您可以尝试迭代方法!

P.S。我不给你答案,因为我觉得你想自己解决这个问题!

您可以使用 itertools.combinations 来完成:

from itertools import combinations

l = ['a', 'b', 'c', 'd']

c = [list(combinations(l, i)) for i in range(1, len(l) + 1)]
>>> c
[[('a',), ('b',), ('c',), ('d',)],
 [('a', 'b'), ('a', 'c'), ('a', 'd'), ('b', 'c'), ('b', 'd'), ('c', 'd')],
 [('a', 'b', 'c'), ('a', 'b', 'd'), ('a', 'c', 'd'), ('b', 'c', 'd')],
 [('a', 'b', 'c', 'd')]]