使用Python 3从列表生成所有可能的顺序字符串

dja*_*o-d 2 python python-3.x

我有一个清单:

["toaster", "oven", "door"]  
Run Code Online (Sandbox Code Playgroud)

我需要获得可以创建的所有可能的连续单词.输出应如下所示:

["toaster", "toaster oven", "toaster oven door", "oven", "oven door", "door"]
Run Code Online (Sandbox Code Playgroud)

获取此列表的最有效方法是什么?我已经看过itertools.combinations()了Stack Overflow上发现的一些其他建议,但没有任何可以产生这种确切结果的建议.

例如,上面的列表不是powerset,因为只应使用输入列表中彼此相邻的单词.一个幂将结合toaster并door进入toaster door,但是这两个词不相邻.

Thi*_*lle 9

你可以这样做:

words = ["toaster", "oven", "door"]  

length = len(words)
out = []
for start in range(length):
    for end in range (start+1, length+1):
        out.append(' '.join(words[start:end]))

print(out)

# ['toaster', 'toaster oven', 'toaster oven door', 'oven', 'oven door', 'door']
Run Code Online (Sandbox Code Playgroud)

您只需确定要使用的第一个和最后一个单词.

您还可以使用列表理解:

[' '.join(words[start:end]) for start in range(length) for end in range(start+1, length+1)]

#['toaster', 'toaster oven', 'toaster oven door', 'oven', 'oven door', 'door']
Run Code Online (Sandbox Code Playgroud)