Вот простой способ использования itertools.combinations
, давайте сначала создадим все пары, а затем filter
.
from itertools import combinations
def filter_(tup):
x, y = tup
p1 = x.split('_')
p2 = y.split('_')
return (p1[0] != p2[0]) and (p1[1] != p2[1])
list(filter(filter_, combinations([*A, *B], 2)))
[('Cars_A', 'Planes_B'),
('Cars_A', 'Houses_B'),
('Cars_A', 'Bikes_B'),
('Planes_A', 'Cars_B'),
('Planes_A', 'Houses_B'),
('Planes_A', 'Bikes_B'),
('Houses_A', 'Cars_B'),
('Houses_A', 'Planes_B'),
('Houses_A', 'Bikes_B'),
('Bikes_A', 'Cars_B'),
('Bikes_A', 'Planes_B'),
('Bikes_A', 'Houses_B')]
list(filter(filter_, combinations([*A, *B, *C], 2)))
[('Cars_A', 'Planes_B'),
('Cars_A', 'Houses_B'),
('Cars_A', 'Bikes_B'),
('Cars_A', 'Planes_C'),
('Cars_A', 'Houses_C'),
('Cars_A', 'Bikes_C'),
('Planes_A', 'Cars_B'),
('Planes_A', 'Houses_B'),
('Planes_A', 'Bikes_B'),
('Planes_A', 'Cars_C'),
('Planes_A', 'Houses_C'),
('Planes_A', 'Bikes_C'),
('Houses_A', 'Cars_B'),
...