def windows(iterable,n,m=1):
x = iter(iterable)
l = []
y = next(x)
for i in range(n):
l.append(y)
y = next(x)
yield l
while x:
for i in range(m):
l.pop(0)
for i in range(m):
l.append(y)
y = next(x)
yield l
Windowsジェネレータを書くには、iterableと2つのint(nとmをmのデフォルト値1と呼ぶ)をパラメータとして書く必要があります。 n値:最初のリストに最初のn値が含まれます。後続のリストはすべて、前のリストから最初のmを削除し、返されたリストに入れる値がn個未満になるまで、繰り返し可能なものから次のm個の値を追加します。例えばステップmで長さnの繰り返し可能なスライディングウィンドウを生成する
:
for i in windows('abcdefghijk', 4,2):
print(i,end='')
プリント['a','b','c','d'] ['c','d','e','f'] ['e','f','g','h'] ['g','h','i','j']
。
私は私が問題を把握することはできません
[['i', 'j', 'k'], ['i', 'j', 'k'], ['i', 'j', 'k'], ['i', 'j', 'k']]
私のコードを印刷、上記の関数を呼び出します。誰か私はそれを修正するために助けることができますか?前もって感謝します。
1つのライナーで、私が試したいくつかのケースのために働くように見えます。それらをすべて保存して、一度にすべて印刷すると(生成されたそれぞれの印刷ではなく)、明らかに同じ内容がすべて印刷されます。それぞれのステップでリストのコピーを作るために '' yield l [:] ''を試してください。 – jasonharper
'['i'、 'j'、 'k']'の返りを避けるために、おそらく 'len(l)== n:yield l [:]'も欲しいでしょう。 –