Вы можете попробовать это (совместимо как с python 2.x, так и с python 3.x):
s = ["this", "is", "just", "a", "simple", "test"] # the input
sepCount = len(s) - 1 # separator count of the input
output = [] # output
for i in range(0, 2 ** sepCount): # iterate through all possible combinations
t = s # modified string
j = i # for converting to binary
for k in reversed(range(sepCount)):
if j % 2 == 0:
t = t[ : k] + [" ".join(t[k : k + 2])] + t [k + 2 :] # replace separator to " "
j = j // 2
output.append(t)
print(output)
Вывод:
[['this is just a simple test'],
['this is just a simple', 'test'],
['this is just a', 'simple test'],
['this is just a', 'simple', 'test'],
['this is just', 'a simple test'],
['this is just', 'a simple', 'test'],
['this is just', 'a', 'simple test'],
['this is just', 'a', 'simple', 'test'],
['this is', 'just a simple test'],
['this is', 'just a simple', 'test'],
['this is', 'just a', 'simple test'],
['this is', 'just a', 'simple', 'test'],
['this is', 'just', 'a simple test'],
['this is', 'just', 'a simple', 'test'],
['this is', 'just', 'a', 'simple test'],
['this is', 'just', 'a', 'simple', 'test'],
['this', 'is just a simple test'],
['this', 'is just a simple', 'test'],
['this', 'is just a', 'simple test'],
['this', 'is just a', 'simple', 'test'],
['this', 'is just', 'a simple test'],
['this', 'is just', 'a simple', 'test'],
['this', 'is just', 'a', 'simple test'],
['this', 'is just', 'a', 'simple', 'test'],
['this', 'is', 'just a simple test'],
['this', 'is', 'just a simple', 'test'],
['this', 'is', 'just a', 'simple test'],
['this', 'is', 'just a', 'simple', 'test'],
['this', 'is', 'just', 'a simple test'],
['this', 'is', 'just', 'a simple', 'test'],
['this', 'is', 'just', 'a', 'simple test'],
['this', 'is', 'just', 'a', 'simple', 'test']]
Мотив: есть n-1разделители (,
) для списка длины n.Есть 2 ^ (n-1) способа заменить ,
s пустым пробелом.Итерируя все эти 2 ^ (n-1) возможных путей, вы можете генерировать все возможные комбинации этих слов, разделенные пробелами.