Беда со списками комбинаций в питоне - PullRequest
0 голосов
/ 16 ноября 2018

У меня есть несколько списков Python с информацией, которую я хотел бы объединить.Эти списки похожи на эти:

vars1 = ["x1", "x2"]
vars2 = ["y1", "y2"]
main_list = ["a","b","c","d"]

Я хочу получить все возможные комбинации (даже если я не знаю правильного названия операции), чтобы охватить все случаи, которые я описал ниже:

[
    ("x1,a,x2", "y1,a,y2"), ("x1,a,x2", "y1,b,y2"),
    ("x1,a,x2", "y1,c,y2"), ("x1,a,x2", "y1,d,y2"),
    ("x1,b,x2", "y1,a,y2"), ("x1,b,x2", "y1,b,y2"), 
    ("x1,b,x2", "y1,c,y2"), ("x1,b,x2", "y1,d,y2")
    ("x1,c,x2", "y1,a,y2"), ("x1,c,x2", "y1,b,y2"),
    ("x1,c,x2", "y1,c,y2"), ("x1,c,x2", "y1,d,y2"),
    ("x1,d,x2", "y1,a,y2"), ("x1,d,x2", "y1,b,y2"),
    ("x1,d,x2", "y1,c,y2"), ("x1,d,x2", "y1,d,y2"),
]

Я исследовал функцию itertools.product, но не могу получить желаемый результат.

Буду признателен, если вы поможете мне.

1 Ответ

0 голосов
/ 16 ноября 2018

Ваш вопрос не очень понятен, но похоже, что вы хотите (поправьте меня, если я ошибаюсь):

vars1 = ["x1", "x2"]
vars2 = ["y1", "y2"]
main_list = ["a","b","c","d"]
result = []

for a1, a2 in itertools.product(main_list, main_list):
    result.append((','.join((vars1[0], a1, vars1[1])), ','.join((vars2[0], a2, vars2[1]))))

Другими словами, значения в форме ('x1,<a1>,x2', 'y1,<a2>,y2') для всех (<a1>, <a2>) в декартовом произведении множества {'a', 'b', 'c', 'd'} с самим собой, для чего действительно itertools.product предназначено.

Результат:

[('x1,a,x2', 'y1,a,y2'),
 ('x1,a,x2', 'y1,b,y2'),
 ('x1,a,x2', 'y1,c,y2'),
 ('x1,a,x2', 'y1,d,y2'),
 ('x1,b,x2', 'y1,a,y2'),
 ('x1,b,x2', 'y1,b,y2'),
 ('x1,b,x2', 'y1,c,y2'),
 ('x1,b,x2', 'y1,d,y2'),
 ('x1,c,x2', 'y1,a,y2'),
 ('x1,c,x2', 'y1,b,y2'),
 ('x1,c,x2', 'y1,c,y2'),
 ('x1,c,x2', 'y1,d,y2'),
 ('x1,d,x2', 'y1,a,y2'),
 ('x1,d,x2', 'y1,b,y2'),
 ('x1,d,x2', 'y1,c,y2'),
 ('x1,d,x2', 'y1,d,y2')]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...