Вы можете разделить эту проблему на два этапа.Сначала выясним все возможные подмножества позиций, которые следует повторить.Это, по сути, набор питания , взятый отсюда с удаленным пустым корпусом.Построение его из индексов позволяет решению быть устойчивым к словам, которые содержат повторяющиеся буквы для повторения.
Во-вторых, для каждого случая в блоке питания создайте правильную строку и отобразите ее.
from itertools import chain, combinations
def powerset_non_empty(iterable):
"""
powerset with empty set skipped
powerset([1,2,3]) --> (1,) (2,) (3,) (1,2) (1,3) (2,3) (1,2,3)
"""
xs = list(iterable)
# note we return a list, but could choose to return an iterator too
return list(chain.from_iterable(combinations(xs,n) for n in range(1, len(xs)+1)))
l = ['a', 'l', 'e']
word = "apple"
indices = [i for i,c in enumerate(word) if c in l]
number_of_repetition = 3
powerset = powerset_non_empty(indices)
result = []
for index_tuple in powerset:
s = ''
for i, c in enumerate(word):
if i in index_tuple:
s += (number_of_repetition * c)
else:
s += c
print(s)
result.append(s)
#Output:
['aaapple',
'appllle',
'appleee',
'aaappllle',
'aaappleee',
'appllleee',
'aaappllleee']