次のような Python のリストの長いリストがあります。
myList=[
('a',[1,2,3,4,5]),
('b',[6,7,8,9,10]),
('c',[1,3,5,7,9]),
('d',[2,4,6,8,10]),
('e',[4,5,6,7,8])
]
そして、共通の価値観を余すところなく列挙したいと思います
('a:b', ),
('a:c', [1,3,5]),
('a:d', [2,4]),
('a:e', [4,5]),
('b:c', [7,9]),
('b:d', [6,8,10]),
('a:c:e', [5]),
('b:c:e', [7]),
('b:d:e', [6,8]),
すべての共通値が識別されるまで、4、5、6 のグループについても同じです (リストがより長いと仮定します)。
itertools
これは、ライブラリまたはセット、または上記の組み合わせを使用して可能ですか?
生成する新しいリストごとに元のリストをループする関数を作成しようとしていますが、うまくいきません!
ここに私が持っているものがあります:
def findCommonElements(MyList):
def sets(items):
for name, tuple in items:
yield name, set(tuple)
def matches(sets):
for a, b in combinations(sets, 2):
yield ':'.join([a[0], b[0]]), a[1] & b[1]
combinationsSet=list(matches(sets(keywordCount)))
combinationsList=[]
for pair,tup in combinationsSet:
setList=list(tup)
combinationsList.append((pair, len(setList), setList))
combinationsList=sorted(combinationsList,key=lambda x: x[1], reverse=True) #this just sorts the list by the number of common elements
return combinationsList