не очень хороший код, но делает то, что вы хотите:
from itertools import combinations
from operator import and_
from functools import reduce
A = ["a", "b", "c", "d"]
B = ["a", "c", "g", "e"]
C = ["a", "b", "f", "e"]
lst = (set(A), set(B), set(C))
ret = []
for r in range(3, 0, -1):
for comb in combinations(lst, r=r):
ret.append(reduce(and_, comb))
print(ret)
я преобразовал ваши списки в наборы;set_a & set_b
(add_(set_a, set_b)
, соответственно) выбирает элементы из обоих наборов. itertools.combinations
, вызываемый с помощью r=3
, r=2
и r=1
, выбирает комбинации в нужном вам порядке.