Как преобразовать этот однострочник в генератор, который возвращает k элементов? - PullRequest
1 голос
/ 15 мая 2019

Как бы вы переписали следующий код скользящего окна, используя генератор?

Моя проблема в том, что на каждой итерации я хочу использовать 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)
...