Допустим, у меня есть два списка списков, а я - палочка для создания из него различных перестановок. Посмотрите на эти два списка:Создайте подмножество возможных перестановок
l1 = [[0, 8], [4], [6, 7], [1], [3], [5], [2]]
l2 = [[4, 8], [0], [6, 7], [3], [1], [5], [2]]
Эти два списка представляют собой сопоставления, которые у меня уже есть. Поэтому я знаю некоторые части моей перестановки, но не все из них. Как я вижу, возможны только четыре перестановки:
(4, 3, 2, 1, 0, 5, 6, 7, 8)
(8, 3, 2, 1, 0, 5, 7, 6, 4)
(4, 3, 2, 1, 0, 5, 7, 6, 8)
(8, 3, 2, 1, 0, 5, 6, 7, 4)
Подумав об этом, у меня есть следующая идея. Я бы сгенерировал все четыре возможности l1
(будучи кортежем в конце) сделать l2
в кортеж, сделать словарь zip, заказать этот словарь и преобразовать эти четыре dicts в список кортежей. Звучит разумно?
Мне нелегко генерировать четыре кортежа. Это то, что у меня есть до сих пор.
l1 = [[0, 8], [4], [6, 7], [1], [3], [5], [2]]
l2 = [[4, 8], [0], [6, 7], [3], [1], [5], [2]]
out = [()]
def get_permutations(lst):
for i in lst:
for perms in permutations(i):
out[0] = out[0] + perms
return out
print(get_permutations(l1))
который печатает [(0, 8, 8, 0, 4, 6, 7, 7, 6, 1, 3, 5, 2)]
Как сгенерировать другой кортеж, когда я получаю запись в моем списке, где более чем одна перестановка этой записи списка можно?
Я также знаю, что print(list(itertools.product(*l1)))
делает почти то, что хочу, но не совсем. Он дает [(0, 4, 6, 1, 3, 5, 2), (0, 4, 7, 1, 3, 5, 2), (8, 4, 6, 1, 3, 5, 2), (8, 4, 7, 1, 3, 5, 2)]
. Возможно, есть способ изменить это.
Это не вопрос домашней работы.
Чтобы обеспечить контекст: я создаю программу для проверки изоморфизма графа. Списки - это цветовые классы узлов. С этими классами цветов я хочу ограничить все возможные перестановки графика только несколькими, чтобы сделать грубую силу быстрее.
Это звучит как домашнее задание вопрос –
Представьте, что вы делали до сих пор – The6thSense
Это википедии статья, безусловно, поможет математической точки зрения! https://en.wikipedia.org/wiki/Cyclic_permutation – Hrvoje