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)に変更できるように、このコードをどのように変更するかです。ウィンドウのサイズを変更する方法は知っていますが、増分はわかりません。ありがとう!

4

3 に答える 3

1

増分を変更する必要はありません。n 番目の要素ごとに取得できます。

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

完全に最適化されていませんが、シンプルです。

于 2011-08-03T10:33:25.600 に答える
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
于 2015-02-11T01:48:56.140 に答える
0

ヒント: このnext関数を使用して、反復子から次の要素を取得できます。反復ごとに複数の要素を取得して追加する必要があります(それが難しいと思います。ウィンドウの反対側を別の量だけ前方に移動する方法がわかります:))。

于 2011-08-03T10:06:15.333 に答える