python在列表中的n个连续项上循环

python在列表中的n个连续项上循环,python,Python,我需要迭代列表中的n个连续元素。 例如: data = [1,2,3,4,5,6,7] 我需要检查一下: 1 2 2 3 3 4 4 5 或: 有没有zip函数可以实现这一点?这是一项非常简单的任务,您可以自己编写程序。我不认为有一个预先封装的功能来做这件事 def func(arr,n): i = 0 while i+n < len(arr): for range(i,i+n): .... make stuff here....

我需要迭代列表中的n个连续元素。 例如:

data = [1,2,3,4,5,6,7]
我需要检查一下:

1 2
2 3
3 4
4 5
或:


有没有zip函数可以实现这一点?

这是一项非常简单的任务,您可以自己编写程序。我不认为有一个预先封装的功能来做这件事

def func(arr,n):
    i = 0
    while i+n < len(arr):
       for range(i,i+n):
          .... make stuff here....
       i = i + 1
def func(arr,n):
i=0
当i+n
根据您是要迭代子列表还是平面列表:

from itertools import chain
for x in chain(*[ a[i:i+n] for i in xrange(len(a)-n+1) ]):
    print x
或:


我不确定你到底在找什么,但试试这个:

data = [1, 2, 3, 4, 5, 6, 7]

n = 3

[data[i:i+n] for i in range(len(data) - n + 1)]

# [[1, 2, 3], [2, 3, 4], [3, 4, 5], [4, 5, 6], [5, 6, 7]]
或:


可能不是最好的方法,但仍然有用:

>>> data = [1,2,3,4,5,6,7]
>>> map(None,data[:-1],data[1:])
[(1, 2), (2, 3), (3, 4), (4, 5), (5, 6), (6, 7)]

>>> map(None,data[:-2],data[1:-1],data[2:])
[(1, 2, 3), (2, 3, 4), (3, 4, 5), (4, 5, 6), (5, 6, 7)]

假设您总是对列表或其他序列执行此操作,并且不需要处理任意的可重用项:

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()
或切片)执行此操作,您可以调整:

具体答复:

>>> zip(data,data[1:])
[(1, 2), (2, 3), (3, 4), (4, 5), (5, 6), (6, 7)]
一般答覆:

>>> def consecutives(data,per_set):
...   return zip(*[data[n:] for n in range(per_set)])
...
>>> consecutives(range(1,8),2)
[(1, 2), (2, 3), (3, 4), (4, 5), (5, 6), (6, 7)]
>>> consecutives(range(1,8),3)
[(1, 2, 3), (2, 3, 4), (3, 4, 5), (4, 5, 6), (5, 6, 7)]
>>> consecutives(range(1,8),4)
[(1, 2, 3, 4), (2, 3, 4, 5), (3, 4, 5, 6), (4, 5, 6, 7)]

到目前为止,我有这个我正在寻找一个线性:def loopover(listk,n):l1=[];s=0,而(len(listk)):对于范围(0,len(listk))中的i:l1.append(listk[s:n]);s=s+1;n=n+1;我现在意识到zip(*args)和map(None,*args)做了相同的事情,至少在这个上下文中是这样。
>>> 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]]
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)]
>>> zip(data,data[1:])
[(1, 2), (2, 3), (3, 4), (4, 5), (5, 6), (6, 7)]
>>> def consecutives(data,per_set):
...   return zip(*[data[n:] for n in range(per_set)])
...
>>> consecutives(range(1,8),2)
[(1, 2), (2, 3), (3, 4), (4, 5), (5, 6), (6, 7)]
>>> consecutives(range(1,8),3)
[(1, 2, 3), (2, 3, 4), (3, 4, 5), (4, 5, 6), (5, 6, 7)]
>>> consecutives(range(1,8),4)
[(1, 2, 3, 4), (2, 3, 4, 5), (3, 4, 5, 6), (4, 5, 6, 7)]