Я думаю, что это должно получить, что вы хотите: [Я буду стараться, чтобы оптимизировать это ещё]
def combination(word, letter, start=1, end=-1):
if start >= end:
return [word]
else:
new_word = word[:start] + letter + word[start:]
output = [new_word, word]
output.extend(combination(new_word, letter, start+2, end+1))
output.extend(combination(word, letter, start+1, end))
return list(set(output))
выход:
combination('dumb', 'z', start=1, end=len('dumb'))
['dzuzmb', 'duzmb', 'dzuzmzb', 'dzumb', 'dzumzb', 'dumzb', 'dumb', 'duzmzb']
Если вы не хотите, исходное слово в списке возврата, то вы можете пойти с этим кодом:
def combination(word, letter, start=1, end=-1):
if start >= end:
return []
else:
new_word = word[:start] + letter + word[start:]
output = [new_word]
output.extend(combination(new_word, letter, start+2, end+1))
output.extend(combination(word, letter, start+1, end))
return list(set(output))
Объяснение:
база рекурсии заключается в следующем:
if start is >= end: return [No place left to insert letter in word]
otherwise:
insert letter at start of the word and call the same method to work on this new word from inserted index +2.
*+2 because say at index 1 in dumb. We insert letter z as dzumd. Now we don't want to insert another z at dzzumb. So +2.*
also in the original word just pass it into recursion because we want to work on duzmb. where no z is inserted before u.
@DYZ Я не думаю, что цель обмана является актуальной. –
Пожалуйста, объясните, что вы подразумеваете под этими комбинациями. Как вы хотите, чтобы они сформировались. Помогите нам помочь вам. –
@ user2357112 Как я могу объяснить больше lol? лист домашней работы? Мне нужно, чтобы он производил все комбинации.поэтому для примера позволяет сказать, что я хочу, чтобы строка «Тупой» и я хочу другую букву «Z»: все комбинации: DZumb DZuZmb DZuZmZb DuZmZb DumZb лучшее объяснение в настоящее время? добавьте только одну вещь ... Я не хочу, чтобы буква «Z» добавилась в конец или перед строкой «Тупой». – PythonNLMB