python - 将字符串拆分为 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
数量的单词。
解决方案
对于 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']
推荐阅读
- c# - C# 使用 live.com 身份验证和下载页面登录网站
- android - android cordova插件的jar库中的非确定性类加载问题
- r - 如何在 R (tsDyn) 中为 VAR 模型设置参数限制
- javascript - 正则表达式与括号完全匹配
- html - 未能在 Tailwind CSS 表中进行换行
- python - 只有当鼠标悬停在游戏上时角色才会转身
- r - 从 R 中的三元网格点获取三角形网格
- javascript - (盖茨比)如何添加溢出:用点击事件隐藏?
- node.js - 浏览器会一直加载网站的缓存版本,除非进行硬刷新
- scala - scala spark rdd 错误:java.lang.ClassCastException:无法分配 java.lang.invoke.SerializedLambda 的实例