滑动窗口与可变增量- Python



我试图使用Python中的滑动窗口函数来比较一个非常长的值列表。我找到的滑动窗口函数的代码如下:

from itertools import islice
idlist = [1, 2, 3, 4, 5, 6, 7, 8, 9]
list = []
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
for i in window(idlist, n=2):
    list.append(i)
print list

我的问题是,我如何修改这段代码,这样我就可以改变窗口的增量(每个元组生成后移动的量)从1到一个更大的整数,说5或50?我知道如何改变窗口的大小,但不增加。谢谢!

你不需要改变增量,你可以取每n个元素:

# taking every 3rd element moves the start by 3
print list(islice(window(idlist, n=2),None,None,3))

没有完全优化,但是很简单。

提示:可以使用next函数从迭代器中获取下一个元素。你需要在每次迭代中获取并附加多个元素(我认为这是困难所在;您肯定看到如何将另一个窗口的末端向前移动不同的量:))。

也许这就解决问题了

L=[1,2,3,4,5]
def window(L, n=2, jump=1):
    lenght = len(L)
    assert n <= lenght
    for i in range(0,lenght-n+1,jump):
        yield tuple(L[i:i+n])
A=[]
for i in window(L, n=3, jump=1):
    A.append(i)
print A

相关内容

  • 没有找到相关文章

最新更新