Как создать комбинацию элементов в разных наборах?
Допустим, у меня есть n списков, и они не пересекаются. Я хочу сделать каждую комбинацию из n элементов, которую я получаю по одному из всех моих списков, но в этой комбинации есть разные элементы и двойной комбинации нет. Так, [1,1,2]
не допускается и [1,2,3]
такой же как [2,1,3]
,
Например, у меня есть A=[1,2,3]
, B=[2,4,1]
, а также C=[1,5,3]
, Итак, вывод, который я хочу [[1,2,5],[1,2,3],[1,4,5],[1,4,3],[2,4,1],[2,4,5],[2,4,3],[3,2,5],[3,4,5],[3,1,5]]
,
У меня есть поиск Google, и я думаю, что функция product
в модуле itertools
может сделать это. Но я понятия не имею, как сделать одинаковые элементы в каждой комбинации и двойные комбинации.
2 ответа
Может быть что-то вроде:
from itertools import product
A=[1,2,3]
B=[2,4,1]
C=[1,5,3]
L = list(set([ tuple(sorted(l)) for l in product(A,B,C) if len(set(l))==3 ]))
Конечно, вам придется изменить 3
ot соответствующее значение, если вы работаете с более чем 3 списками.
Как насчет этого? создать диктонарию с сортированными перестановками в качестве ключа. принимать значения, только если все три целых числа разные:
from itertools import product
A=[1,2,3]
B=[2,4,1]
C=[1,5,3]
LEN = 3
dct = {tuple(sorted(item)): item for item in product(A,B,C)
if len(set(item)) == LEN}
print(dct)
vals = list(dct.values())
print(vals)