我想编写一个脚本,以列表的形式输入类别,并返回将这些类别分成两组的唯一方法。目前我已将其以元组形式表示(list_a,list_b),其中list_a和list_b的并集表示完整的类别列表。
下面以类别['A','B','C','D']为例,展示了所有可能的组合。但是,有些是重复的(['A'],['B','C','D'])表示与(['B','C','D'],['A'])相同的分割方式。如何保留唯一的分割方式?此外,这篇文章的更好的标题是什么?
我需要以下内容:
下面以类别['A','B','C','D']为例,展示了所有可能的组合。但是,有些是重复的(['A'],['B','C','D'])表示与(['B','C','D'],['A'])相同的分割方式。如何保留唯一的分割方式?此外,这篇文章的更好的标题是什么?
import itertools
def getCompliment(smallList, fullList):
compliment = list()
for item in fullList:
if item not in smallList:
compliment.append(item)
return compliment
optionList = ['A','B','C','D']
combos = list()
for r in range(1,len(optionList)):
tuples = list(itertools.combinations(optionList, r))
for t in tuples:
combos.append((list(t),getCompliment(list(t), optionList)))
print(combos)
[(['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']),
(['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']),
(['B'], ['A', 'C', 'D']),
(['C'], ['A', 'B', 'D']),
(['D'], ['A', 'B', 'C']),
(['A', 'B'], ['C', 'D']),
(['A', 'C'], ['B', 'D']),
(['A', 'D'], ['B', 'C'])]