У меня есть сложная проблема с перестановкой, которую я нахожу очень сложной для кодирования.Перестановки в 2D-списках (Python)
Принесите меня, это может показаться немного уродливым.
У меня есть что-то этой формы:
L = [ [[(1, 2)], [(1, 2),(1, 3)]], [[(2, 3)]] ]
Я хочу, чтобы вывести все «Перестановки», как это:
[ [(1,2),(2,3)], [(2,3),(1,2)], [(1,2),(1,3),(2,3)], [(2,3),(1,2),(1,3)] ]
Наглядно, мне нужны все упорядоченности кортежей, содержащихся в списках (без повторения). Однако кортежи в одном списке не могут быть вместе. Например. Для [[(1, 2)], [(1, 2), (1, 3)]], (1,2) и (1,2), (1,3) находятся в одном списке. Таким образом, элемент на выходе не может быть (1,2) (1,3) (1,2).
Я некоторые грязный код, написанный, что делает работу, но будет требовать очистки на выходе:
output=[]
for x in input:
for y in x:
a=[]
for x1 in input:
if x!=x1:
for y1 in x1:
a.append(list(permutations([y,y1],len([y,y1]))))
output.append(a)
Это было бы достаточно, но я также должен быть в состоянии сделать это для входов, как это:
[[[(1, 2)], [(1, 2), (1, 3)]], [[(2, 3)]], [[(4,5),(6,7)]]
Таким образом, элементы, как это будет incuded на выходе:
[(4,5),(6,7),(1,2),(2,3)]
Кто-нибудь есть идеи, как я должен подходить к этому? Или какие-нибудь советы?
Этот вопрос не совсем ясно для меня. Что вы подразумеваете под «перестановкой» и какой частью списка? Каково значение нескольких слоев вложенности в списке?Какой порядок должен содержать выход и как его следует сгруппировать? Могут ли списки быть вложенными на произвольные глубины? На данный момент я не могу понять, что задает этот вопрос, и я сомневаюсь, что кто-то еще может это сделать. –
Согласен с Score_Under. Во второй части вопроса, похоже, вы просто пытаетесь получить все уникальные кортежи. – ate50eggs
Я не понимаю проблему. Похоже, что есть базовые элементы, которые представляют собой списки из двух целых чисел, и, возможно, вам нужны все перестановки из них 1, 2 и 3 за один раз без повторения, но подсчет разных порядков. Способ сделать это - сначала создать список всех базовых элементов uniqe, а затем перечислить их перестановки в группах по 1, 2 и 3. Это легко сделать с помощью itertetools.permutations, поскольку он принимает аргумент, определяющий длину группы (называемый r f для длины кортежа). См. Https://docs.python.org/3/library/itertools.html#itertools.permutations. –