3 回答
TA贡献1817条经验 获得超6个赞
是的,您正在寻找的是滑动/移动窗口。有多种方法可以实现这一点,但最简单的方法是tee()使用. 使用它,您可以定义如下所示的默认窗口大小为 2 的函数。islice()itertoolswindow()
import itertools
def window(iterable, n=2):
iters = itertools.tee(iterable, n)
for i, it in enumerate(iters):
next(itertools.islice(it, i, i), None)
return zip(*iters)
然后你可以将它用作
>>> things=[0, 1, 2, 3, 4, 5, 6, 7]
>>> list(window(things, n = 3))
[(0, 1, 2), (1, 2, 3), (2, 3, 4), (3, 4, 5), (4, 5, 6), (5, 6, 7)]
>>> for elem in window(things, n = 3):
... print(elem)
...
(0, 1, 2)
(1, 2, 3)
(2, 3, 4)
(3, 4, 5)
(4, 5, 6)
(5, 6, 7)
编辑:一次使用更简单的选项可能是
>>> list(zip(things, things[1:], things[2:]))
[(0, 1, 2), (1, 2, 3), (2, 3, 4), (3, 4, 5), (4, 5, 6), (5, 6, 7)]
TA贡献1831条经验 获得超10个赞
让我们尝试使用enumerate,这len(things[i : i+len_]) == len_是删除在结束迭代时累积的大小不均的列表。
len_ = 3
[things[i : i+len_] for i, j in enumerate(things) if len(things[i : i+len_]) == len_]
[[0, 1, 2], [1, 2, 3], [2, 3, 4], [3, 4, 5], [4, 5, 6], [5, 6, 7]]
len_ = 4
[things[i : i+len_] for i, j in enumerate(things) if len(things[i : i+len_]) == len_]
[[0, 1, 2, 3], [1, 2, 3, 4], [2, 3, 4, 5], [3, 4, 5, 6], [4, 5, 6, 7]]
TA贡献1820条经验 获得超9个赞
另一种方法可能是:
for i in things[0:-2]: a=things.index(i) process(things[a:a+3])
添加回答
举报