Ограниченные перестановки строк в Python

Как я могу сделать следующее в Python?

Учитывая две строки. Распечатайте все переплетения двух строк. Перемежение означает, что если B приходит после A, оно также должно появиться после A в чередуемой строке. ex-AB и CD ABCD ACBD ACDB CABD CADB CDAB

2 Solutions collect form web for “Ограниченные перестановки строк в Python”

Это эффективно проблема с деревом (а именно, дерево решений о том, следует ли продвигать вдоль одной строки или другой). Зачастую самый простой способ приблизиться к проблеме с деревом – это рекурсивное решение.


Вот пример:

def ordered_permutations(str1, str2): perms = [] if len(str1) + len(str2) == 1: return [str1 or str2] if str1: for item in ordered_permutations(str1[1:], str2): perms.append(str1[0] + item) if str2: for item in ordered_permutations(str1, str2[1:]): perms.append(str2[0] + item) return perms 

Шляпы на @Amber для распознавания проблемы и предоставления очень элегантного решения.

Вот мои две центы (просто распечатывая ответы):

 def interleave(L1, L2, answer=None): if answer is None: answer = '' if not L1 and not L2: print answer else: if L1: a = answer + L1[0] interleave(L1[1:], L2, a) if L2: ans = answer + L2[0] interleave(L1, L2[1:], and) >>> interleave('ab', 'cd') abcd acbd acdb cabd cadb cdab 

Надеюсь это поможет

  • Более эффективный способ получить целые перестановки?
  • Как я могу сгенерировать список всех возможных перестановок нескольких букв?
  • Все возможные комбинации карт / покерных рук для набора игроков
  • эффективные подсчеты и перестановки
  • Python подсчитывает все возможные комбинации для таблицы
  • Создание перестановок списка с повторяющимися элементами
  • Вычисление комбинаций длины k из списка длины n с использованием рекурсии
  • Python - лучший язык программирования в мире.