Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/291.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
带可变增量的滑动窗口-Python_Python_Bioinformatics_Itertools_Sliding Window - Fatal编程技术网

带可变增量的滑动窗口-Python

带可变增量的滑动窗口-Python,python,bioinformatics,itertools,sliding-window,Python,Bioinformatics,Itertools,Sliding Window,我试图使用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

我试图使用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?我知道如何更改窗口的大小,但不知道增量。
谢谢

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

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

您不必更改增量,您可以获取每个第n个元素:

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

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

您不必更改增量,您可以使用第n个元素:

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

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

也许这就解决了问题

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
L=[1,2,3,4,5]
def窗口(L,n=2,跳转=1):
长度=长度(L)

断言n也许这能解决问题

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
L=[1,2,3,4,5]
def窗口(L,n=2,跳转=1):
长度=长度(L)

非常感谢!真是太好了。非常感谢!工作是一种享受。