首页 > 解决方案 > 将字符串拆分为 x 个单词的列表,重复最后的 x-1 个单词

问题描述

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

根据将字符串拆分为两个单词的列表,重复最后一个单词,以下代码成功地将字符串拆分为两个单词对:

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-word、3-word、4-word 场景,但理想情况下,我希望有一个函数可以处理任意x数量的单词。

标签: python

解决方案


对于 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']

推荐阅读