from collections import deque
def window(seq, n=2):
it = iter(seq)
win = deque((next(it, None) for _ in xrange(n)), maxlen=n)
yield win
append = win.append
for e in it:
append(e)
yield win
a=[1,2,3]
b=[2,4,6]
for d in zip(window(a,2),window(b,2)):
print d
raw_input("Press Enter to continue...")
出力:は、STそれぞれは、その状態の残業を変更し、同じアイテムを返し
(deque([2, 3], maxlen=2), deque([4, 6], maxlen=2)) Press Enter to continue... (deque([2, 3], maxlen=2), deque([4, 6], maxlen=2)) Press Enter to continue...
何イムすべてキャプチャするために、ここで行うことですしよう
:つまり(deque([1, 2], maxlen=2), deque([2, 4], maxlen=2)) Press Enter to continue... (deque([2, 3], maxlen=2), deque([4, 6], maxlen=2)) Press Enter to continue...
a
とb
の長さ2の窓は、出力は次のようになることを期待イムzip形式
明らかに、window
は、私がここに何が起こるかを推測、それだけが保持しているアイテムの変化に何度も何度も同じオブジェクトを得ているが、反復がImは同じ2デックを取得するので、開始する前にzip
が反復可能を作成していることですオブジェクトは2回圧縮されますが、問題はそれらを最終状態にすることです。
ウィンドウ機能でコピーを作成しなくても、それを修正することをどのように提案しますか?
返すために窓を変え例えばコピーは動作します:
def window(seq, n=2):
it = iter(seq)
win = deque((next(it, None) for _ in xrange(n)), maxlen=n)
yield list(win)
append = win.append
for e in it:
append(e)
yield list(win)
は、しかし、私のユースケースAとBの中で、あまり効率的で巨大かつ反復が非効率的である前にすべてのそれらのコピーをziping ...
されています
(try python3 :-)) – PRMoureu
@PRMoureuそれは動作します...しかし、Python 2の解決策はありますか? –