Вычислить все пересечения powerset двух списков - PullRequest
0 голосов
/ 10 декабря 2018

Я нашел много статей о том, как найти пересечение 2 списков, но ни в одном из них не было написано, как я могу получить все пересечения (возможно, это можно назвать подынтересами).

Пример:

list1 = ['a', 'b', 'c', 'd']
list2 = ['b', 'c', 'd', 'e']

print (find_all_intersections(list1, list2))

Вывод:

['b', 'c', 'd', 'bc', 'bd', 'cd', 'bcd']

Есть ли какая-нибудь функция, которая может это сделать?

1 Ответ

0 голосов
/ 10 декабря 2018

Ну, это на самом деле довольно просто.Найдя пересечение, вычислите блок питания:

from itertools import chain, combinations

s = set(list1).intersection(list2)
[''.join(c) for c in chain.from_iterable(
    combinations(s, r) for r in range(len(s)+1)) if c]

['b', 'c', 'd', 'bc', 'bd', 'cd', 'bcd']

Более подробную информацию о создании блоков питания можно найти здесь .

...