Как бы вы переписали следующий код скользящего окна, используя генератор?
Моя проблема в том, что на каждой итерации я хочу использовать k = 100 элементов или количество оставшихся элементов.
n=1005
m=5
step=2
a=[(i,j) for i in range(0,n-m+1,step) for j in range(0,n-m+1,step) if i<j]
Я придумал это решение:
Может быть, это был глупый вопрос. В любом случае вот возможное, неоптимальное решение:
def my_gen(n,m,k,step):
res = []
count = 0
for i in range(0,n-m+1,step):
for j in range(0,n-m+1,step):
if i<j:
res.append((i,j))
count += 1
if count%k == 0:
yield res
res = []
yield res
Проверка работоспособности:
n=104
m=5 # size of the window
step=2
k=8
a=[(i,j) for i in range(0,n-m+1,step) for j in range(0,n-m+1,step) if i<j]
gen=my_gen(n,m,k,step)
b=[]
for g in gen:
b.extend(g)
for x,y in zip(a,b):
assert(x==y)