簡體   English   中英

Python:列表內容的所有可能組合

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM