Python在移动窗口中拆分字符串

Sri*_*aju 11 python string split

我有一个像这样的数字字符串 - digit = "7316717"

现在我想以这样的方式拆分字符串,使得输出一次是3位数的移动窗口.所以我得到了 -

["731", "316", "167", "671", "717"]

这种方法将如何?直截了当的方式是进行for循环和迭代.但我觉得一些内置的python字符串函数可以用更少的代码完成.知道任何这样的方法吗?

Sha*_*hin 12

itertools例子提供了window,不只是该函数:

from itertools import islice
def window(seq, n=2):
    "Returns a sliding window (of width n) over data from the iterable"
    "   s -> (s0,s1,...s[n-1]), (s1,s2,...,sn), ...                   "
    it = iter(seq)
    result = tuple(islice(it, n))
    if len(result) == n:
        yield result    
    for elem in it:
        result = result[1:] + (elem,)
        yield result
Run Code Online (Sandbox Code Playgroud)

用法示例:

>>> ["".join(x) for x in window("7316717", 3)]
['731', '316', '167', '671', '717']
Run Code Online (Sandbox Code Playgroud)

  • `pairwise`确实看起来更令人愉快,但它被硬编码为2的滑动窗口(因此*对*明智).我想它可能是参数化的,但它可能不再那么令人愉快了,因为它使用`tee`和`zip`它可能不如`window`配方那么高效. (3认同)

Ste*_*ski 8

>>> s = "7316717"
>>> [s[i:i+3] for i in range(len(s)-2)]
['731', '316', '167', '671', '717']
Run Code Online (Sandbox Code Playgroud)