2011-08-03 42 views
1

我想在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?我知道如何改变窗口的大小,但不是增量。 谢谢!

回答

1

你不必改变增量,可以采取每第n个元素:

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

没有完全优化,但简单。

+0

非常感谢!作品一种享受。 – bac

0

提示:next函数可用于从迭代器中获取下一个元素。您需要每次迭代获取并追加多个元素(我认为这是困难;当然您会看到如何将窗口末尾的其他向前移动不同的数量:))。

0

也许这个解决问题

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