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])
添加回答
舉報