首页 > 解决方案 > Python:使用空格生成多个字符串组合

问题描述

我有一个包含 n 个单词的数组作为字符串,例如:

input: ["just", "a", "test"]

我需要做的是创建由空格分隔的这些单词的所有可能组合以及与原始字符串的组合。例如,上面应该创建:

output: [["just", "a", "test"], ["just a", "test"], ["just a test"], ["just", "a test"]]

我一直在使用 itertools 但无法让它做我需要的事情。我目前拥有的:

iterable = ['just', 'a', 'test']

for n in chain.from_iterable(combinations(iterable, n) for n in range(len(iterable)+1)):
    print(n)

以下几乎可以按要求工作:

iterable = ['just', 'a', 'test']
L = [''.join(reversed(x)).rstrip()
     for x in product(*[(c, c+' ') for c in reversed(iterable)])]
print(L)

谢谢你。

编辑:

为了阐明这应该如何处理长度为 4 的数组:输入:['an', 'even', 'bigger', 'test']`

output: 
['an', 'even', 'bigger', 'test']
['an even', 'bigger', 'test']
['an even bigger', 'test']
['an even bigger test']

['an', 'even bigger', 'test']
['an even', 'bigger test']
['an', 'even bigger test']
['an', 'even', 'bigger test']

标签: pythonstringcombinationswhitespacepermutation

解决方案


这是一种解决方案。该partitions功能由@Kiwi 提供

from itertools import combinations

iterable = ['just', 'a', 'test', 'and', 'another']

n = len(iterable)

def partitions(items, k):

    def split(indices):
        i=0
        for j in indices:
            yield items[i:j]
            i = j
        yield items[i:]

    for indices in combinations(range(1, len(items)), k-1):
        yield list(split(indices))

for i in range(1, n+1):
    for x in partitions(iterable, i):
        print([' '.join(y) for y in x])

['just a test and another']
['just', 'a test and another']
['just a', 'test and another']
['just a test', 'and another']
['just a test and', 'another']
['just', 'a', 'test and another']
['just', 'a test', 'and another']
['just', 'a test and', 'another']
['just a', 'test', 'and another']
['just a', 'test and', 'another']
['just a test', 'and', 'another']
['just', 'a', 'test', 'and another']
['just', 'a', 'test and', 'another']
['just', 'a test', 'and', 'another']
['just a', 'test', 'and', 'another']
['just', 'a', 'test', 'and', 'another']        

推荐阅读