То, что вы хотите, это все combinations
всех размеров (1, 2 и 3), комбинации сохраняют порядок (перестановки делают комбинацию в каждом порядке)
from itertools import combinations
print(list(combinations(my_string.split(' '), r=1))) # [('jan',), ('feb',), ('mar',)]
print(list(combinations(my_string.split(' '), r=2))) # [('jan', 'feb'), ('jan', 'mar'), ('feb', 'mar')]
print(list(combinations(my_string.split(' '), r=3))) # [('jan', 'feb', 'mar')]
Теперь вам нужно выполняйте их автоматически, поэтому l oop по количеству элементов во входных данных и объединение каждого слова
from itertools import combinations, chain
# pythonic way
def my_function(values):
items = my_string.split(" ")
return list(chain([' '.join(c) for i in range(1,1+len(items)) for c in combinations(items, r=i)]))
# loop way
def my_function(values):
items = my_string.split(" ")
result = []
for i in range(1,1+len(items)):
comb = combinations(items, r=i)
result.extend(' '.join(c) for c in comb)
return result
chain
сводит список списка в один список