我有一个清单:
["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,但是这两个词不相邻.
你可以这样做:
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)
| 归档时间: |
|
| 查看次数: |
130 次 |
| 最近记录: |