慕的地6264312
是的,您正在寻找的是滑动/移动窗口。有多种方法可以实现这一点,但最简单的方法是tee()使用. 使用它,您可以定义如下所示的默认窗口大小为 2 的函数。islice()itertoolswindow()import itertoolsdef 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)]
慕哥6287543
让我们尝试使用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]]