В зависимости от того, сколько элементов содержит каждый из вариантов комбинаций, всевозможные варианты комбинаций могут быть получены следующими способами: 1) Для двух элементов: АВ, ВА 2) Для трех элементов: АВС, АСВ, ВАС, ВСА, САВ, СВА 3) Для четырех элементов: АВСД, АВДС, АСВД, АСДВ, АДСВ, АДВС, ВАСД, ВАДС, ВСАД, ВСДА, ВДСА, ВДАС, САВД, САДВ, СВАД, СВДА, СДАВ, СДВА, ДАСВ, ДАВС, ДСАВ, ДСВА, ДВАС, ДВСА. 4) Для пяти элементов: АВСДЕ, АВДСЕ, АВДЕС, АСВДЕ, АСДВЕ, АСДЕВ, АДСВЕ, АДСЕВ, АДЕСВ, АДЕВС, ВАСДЕ, ВАДСЕ, ВАДЕС, ВСАДЕ, ВСДАЕ, ВСДЕА, ВДСАЕ, ВДСЕА, ВДЕСА, ВДЕАС, САВДЕ, САДВЕ, САДЕВ, СВАДЕ, СВДАЕ, СВДЕА, СДАВЕ, СДАЕВ, СДЕАВ, СДЕВА, ДАСВЕ, ДАСЕВ, ДАЕСВ, ДАЕВС, ДСАВЕ, ДСЕАВ, ДСЕВА, ДВАСЕ, ДВЕСА, ДЕСАВ, ДЕВСА.
itertools.combinations. Pass the range of indices of your string to it. You will get a list of combinations where you can replace indices with Z and Y. Here's a rough code sketch. I'm not a Python expert, so there might be a more concise implementation. Especially the ugly hack of converting the string to a list because strings in Python are immutable. import itertools def GenerateAll(source, rep): for comb in itertools.combinations(range(len(source)), len(rep)): s = list(source) for (i, j) in enumerate(comb): s[j] = rep[i]; yield "".join(s) print(list(GenerateAll("abcd", "XY"))) # ['XYcd', 'XbYd', 'XbcY', 'aXYd', 'aXcY', 'abXY']
The simplest way to understand this is through nested loops. The outer loop iterates over the indices and replaces one character at a time with Z. The inner loop iterates over the remaining indices and replaces them with either Z or Y.
STRING FOR i FROM 1 TO LENGTH(STRING) REPLACE(STRING, i, 'Z') STRING FOR i FROM 1 TO LENGTH(STRING)-1 REPLACE(STRING, i, 'Z') FOR j FROM i+1 TO LENGTH(STRING) REPLACE(STRING, j, 'Y')
itertools.combinations. Вы можете использовать функцию itertools.combinations, которая принимает диапазон индексов вашей строки в качестве аргумента. Затем вы получите список комбинаций, где каждая комбинация представляет замену символов на заданные позиции Z или Y. Ниже приведен скетч кода. Обратите внимание, что я преобразую строку в список (list), потому что строки в Python неизменяемы (immutable). import itertools def GenerateAll(source, rep): for comb in itertools.combinations(range(len(source)), len(rep)): s = list(source) for (i, j) in enumerate(comb): s[j] = rep[i]; yield "".join(s) print(list(GenerateAll("abcd", "XY"))) # ['XYcd', 'XbYd', 'XbcY', 'aXYd', 'aXcY', 'abXY']
Используйте itertools.combinations для создания всех необходимых комбинаций замен символов в строке. Для этого передайте функции диапазон индексов строки. В результате вы получите список комбинаций, где каждая комбинация представляет собой строку с замененными символами на заданные позиции Z или Y. Приведен набросок кода, где строка "abcd" заменяется на "XYcd", "XbYd", "XbcY", "aXYd", "aXcY" и "abXY".