如何从任何字符串提取n大小的窗口子字符串?



给定一个元素列表,如何创建一个任意大小的窗口,并从中心向左和向右提取n个元素?例如,给定:

l = ['This', 'document', 'is', 'the', 'second', 'document']

and a window = 2

如何提取以下子列表:

['document', 'is', 'the', 'second', 'document']

到目前为止,我试图:

middle = int((len(l)/2))
middle_element = l[middle]
middle_index = l.index(l[middle])
left_side = l[:middle_index]
right_side = l[middle_index:]
sublist = left_side+right_side

我的方法的问题是,它不适用于任何大小的任何列表。当我找到列表的中心时,我应该如何控制从左到右的滑动?

这里有一个方法来完成你的问题:

l = ['This', 'document', 'is', 'the', 'second', 'document']
window = 2
middle = int((len(l)/2))
sublist = l[max(0, middle - window):min(len(l), middle + window + 1)]

输出:

['document', 'is', 'the', 'second', 'document']

解释:

取一片l开始middle - window(但没有强制使用max())小于0。忽略边缘情况,这确保我们得到middle - window,middle - window + 1,…,middle - window + window,它们是window + 1列表项的总数(除了索引为middle的项外,window项在middle的左侧)。我们的切片在middle + window + 1结束(防止min()超出范围,尽管从技术上讲,这不是必需的,因为切片可以容忍大于序列长度的范围结束值),除了上面已经考虑的项目外,还添加了middle + 1,…middle + window(而不是项目middle + window + 1片符号不包括切范围)的结束为一个额外的数window项右边的middle指数。

最新更新