我需要将一个字符串拆分成一个包含 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']
