リスト内のn個の連続する要素を反復処理する必要があります。例えば:
data = [1,2,3,4,5,6,7]
私は調べる必要があります:
1 2
2 3
3 4
4 5
また:
1 2 3
2 3 4
3 4 5
4 5 6
それを行うためのzip機能はありますか?
リスト内のn個の連続する要素を反復処理する必要があります。例えば:
data = [1,2,3,4,5,6,7]
私は調べる必要があります:
1 2
2 3
3 4
4 5
また:
1 2 3
2 3 4
3 4 5
4 5 6
それを行うためのzip機能はありますか?
リストまたは別のシーケンスに対して常にこれを行っており、任意のイテラブルを操作する必要がない場合:
def group(seq, n):
return (seq[i:i+n] for i in range(len(seq)-n+1))
例:
>>> list(group([1,2,3,4,5,6,7], 2))
[[1, 2], [2, 3], [3, 4], [4, 5], [5, 6], [6, 7]]
>>> list(group([1,2,3,4,5,6,7], 3))
[[1, 2, 3], [2, 3, 4], [3, 4, 5], [4, 5, 6], [5, 6, 7]]
任意の iterable (サポートlen()
またはスライスをサポートしない可能性がある) に対してこれを行う必要がある場合は、ペアワイズ レシピを適応させることができます。
from itertools import tee, izip
def group(iterable, n):
"group(s, 3) -> (s0, s1, s2), (s1, s2, s3), (s2, s3, s4), ..."
itrs = tee(iterable, n)
for i in range(1, n):
for itr in itrs[i:]:
next(itr, None)
return izip(*itrs)
>>> list(group(iter([1,2,3,4,5,6,7]), 2))
[(1, 2), (2, 3), (3, 4), (4, 5), (5, 6), (6, 7)]
>>> list(group(iter([1,2,3,4,5,6,7]), 3))
[(1, 2, 3), (2, 3, 4), (3, 4, 5), (4, 5, 6), (5, 6, 7)]
これは、自分でプログラムするのに非常に簡単な作業です。これを行うための事前に用意された機能があるとは思いません。
def func(arr,n):
i = 0
while i+n < len(arr):
for range(i,i+n):
.... make stuff here....
i = i + 1