Skip to main content
 首页 » 编程设计

python之将字符串拆分为 x 个单词的列表,重复最后的 x-1 个单词

2025年05月04日22linjiqin

我需要将一个字符串拆分成一个包含 x 个单词的列表,但重复最后的 x-1 个单词。

line = "Lorem ipsum dolor sit amet consectetur." 

如果 x = 2,输出应该是:

['Lorem ipsum', 'ipsum dolor', 'dolor sit', 'sit amet', 'amet consectetur'] 

如果x = 3,输出应该是:

['Lorem ipsum dolor', 'ipsum dolor sit', 'dolor sit amet', 'sit amet consectetur'] 

根据 Split string into list of two words, repeating the last word ,以下代码成功地将字符串拆分为 2 个单词对:

words = line.split() 
print(list(map(' '.join, zip(words[:-1], words[1:])))) 

然而,我不想将字数硬编码为 2,而是想指定字数 x,例如:

number_of_words = x 
def generate_list(x): 

我尝试在 print(list(map(' '.join, zip(words[:-1], words[1:])))) 中使用整数,但是整数似乎只影响单词的顺序,而不是单词的数量。

我想我可以编写单独的函数来处理 2 个词、3 个词、4 个词的场景,但理想情况下,我希望有一个函数可以处理任意 x 个词。

请您参考如下方法:

对于 3 个单词的滚动窗口,您可以简单地将一个切片列表传递给 zip:

list(map(' '.join, zip(words, words[1:], words[2:]))) 

因此,您可以使用生成器表达式来概括上述表达式:

def rolling_window(words, number_of_words): 
    return list(map(' '.join, zip(*(words[i:] for i in range(number_of_words))))) 

这样:

rolling_window('Lorem ipsum dolor sit amet consectetur'.split(), 3) 

返回:

['Lorem ipsum dolor', 'ipsum dolor sit', 'dolor sit amet', 'sit amet consectetur']