我如何解决这个排列编码问题?
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')]]
我记得在 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')]]