Как создать комбинацию элементов в разных наборах?

Допустим, у меня есть 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)
Другие вопросы по тегам