我想写一个脚本来获取一个类别列表,并返回将类别分成两组的独特方法。现在我有一个元组形式的列表(列表a,列表b),其中列表a和列表b的并集表示类别的完整列表
下面我用一个类别为['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'])]
你很接近。你需要的是一个
set
的结果因为
set
元素必须是可散列的,list
对象是不可散列的,所以可以改用tuple
。这可以通过对代码进行一些微不足道的更改来实现如果需要将结果转换回列表列表,可以通过列表理解:
相关问题 更多 >
编程相关推荐