[英]Python: All possible combinations of contents of a list
如何从另一个列表中获取包含所有可能的内容组合的列表?
例子:
list = [A, B, C, D]
-->(魔术迭代)-->
combinations = [[A, B, C, D],
[[A], [B], [C], [D]],
[[A], [B, C, D]],
[[B], [A, C, D]],
[[C], [A, B, D]],
[[D], [A, B, C]],
[[A, B], [C, D]],
[[A, C], [B, D]],
[[A, D], [B, C]],
[[A], [B], [C, D]]
# and so on
]
尝试这个:
from itertools import combinations
from functools import reduce
import operator
lst = ['A', 'B', 'C', 'D']
res = [[[list(x), list(set(lst) - set(x))]for x in combinations(lst, i + 1)] for i in range(len(lst))]
reduce(operator.iconcat, res, [])
Output:
[[['A'], ['C', 'B', 'D']],
[['B'], ['A', 'C', 'D']],
[['C'], ['A', 'D', 'B']],
[['D'], ['A', 'C', 'B']],
[['A', 'B'], ['C', 'D']],
[['A', 'C'], ['D', 'B']],
[['A', 'D'], ['C', 'B']],
[['B', 'C'], ['A', 'D']],
[['B', 'D'], ['A', 'C']],
[['C', 'D'], ['A', 'B']],
[['A', 'B', 'C'], ['D']],
[['A', 'B', 'D'], ['C']],
[['A', 'C', 'D'], ['B']],
[['B', 'C', 'D'], ['A']],
[['A', 'B', 'C', 'D'], []]]
这似乎满足您的所有要求:
import itertools
def f(ls):
if not ls:
yield []
for i in range(1, len(ls) + 1):
for combo in itertools.combinations(ls, i):
for rest in f(set(ls) - set(combo)):
yield [list(combo), *rest]
Output:
[['A'], ['C'], ['B'], ['D']]
[['A'], ['C'], ['D'], ['B']]
[['A'], ['C'], ['B', 'D']]
[['A'], ['B'], ['C'], ['D']]
[['A'], ['B'], ['D'], ['C']]
[['A'], ['B'], ['C', 'D']]
[['A'], ['D'], ['C'], ['B']]
[['A'], ['D'], ['B'], ['C']]
[['A'], ['D'], ['C', 'B']]
[['A'], ['C', 'B'], ['D']]
[['A'], ['C', 'D'], ['B']]
[['A'], ['B', 'D'], ['C']]
[['A'], ['C', 'B', 'D']]
[['B'], ['C'], ['A'], ['D']]
[['B'], ['C'], ['D'], ['A']]
[['B'], ['C'], ['A', 'D']]
[['B'], ['A'], ['C'], ['D']]
[['B'], ['A'], ['D'], ['C']]
[['B'], ['A'], ['C', 'D']]
[['B'], ['D'], ['C'], ['A']]
[['B'], ['D'], ['A'], ['C']]
[['B'], ['D'], ['C', 'A']]
[['B'], ['C', 'A'], ['D']]
[['B'], ['C', 'D'], ['A']]
[['B'], ['A', 'D'], ['C']]
[['B'], ['C', 'A', 'D']]
[['C'], ['B'], ['A'], ['D']]
[['C'], ['B'], ['D'], ['A']]
[['C'], ['B'], ['A', 'D']]
[['C'], ['A'], ['B'], ['D']]
[['C'], ['A'], ['D'], ['B']]
[['C'], ['A'], ['B', 'D']]
[['C'], ['D'], ['B'], ['A']]
[['C'], ['D'], ['A'], ['B']]
[['C'], ['D'], ['B', 'A']]
[['C'], ['B', 'A'], ['D']]
[['C'], ['B', 'D'], ['A']]
[['C'], ['A', 'D'], ['B']]
[['C'], ['B', 'A', 'D']]
[['D'], ['C'], ['B'], ['A']]
[['D'], ['C'], ['A'], ['B']]
[['D'], ['C'], ['B', 'A']]
[['D'], ['B'], ['C'], ['A']]
[['D'], ['B'], ['A'], ['C']]
[['D'], ['B'], ['C', 'A']]
[['D'], ['A'], ['C'], ['B']]
[['D'], ['A'], ['B'], ['C']]
[['D'], ['A'], ['C', 'B']]
[['D'], ['C', 'B'], ['A']]
[['D'], ['C', 'A'], ['B']]
[['D'], ['B', 'A'], ['C']]
[['D'], ['C', 'B', 'A']]
[['A', 'B'], ['C'], ['D']]
[['A', 'B'], ['D'], ['C']]
[['A', 'B'], ['C', 'D']]
[['A', 'C'], ['B'], ['D']]
[['A', 'C'], ['D'], ['B']]
[['A', 'C'], ['B', 'D']]
[['A', 'D'], ['C'], ['B']]
[['A', 'D'], ['B'], ['C']]
[['A', 'D'], ['C', 'B']]
[['B', 'C'], ['A'], ['D']]
[['B', 'C'], ['D'], ['A']]
[['B', 'C'], ['A', 'D']]
[['B', 'D'], ['C'], ['A']]
[['B', 'D'], ['A'], ['C']]
[['B', 'D'], ['C', 'A']]
[['C', 'D'], ['B'], ['A']]
[['C', 'D'], ['A'], ['B']]
[['C', 'D'], ['B', 'A']]
[['A', 'B', 'C'], ['D']]
[['A', 'B', 'D'], ['C']]
[['A', 'C', 'D'], ['B']]
[['B', 'C', 'D'], ['A']]
[['A', 'B', 'C', 'D']]
from itertools import combinations
elements = ["A", "B", "C", "D"]
total = []
for r in range(1, len(elements) + 1):
total.extend(combinations(elements, r))
print(total)
[('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')]
类似的东西?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.