如何将这种单线转换为返回k个元素的生成器?

时间:2019-05-15 02:56:18

标签: python generator yield

您将如何使用Generator重写以下滑动窗口代码?

我的问题是,我每次迭代都要消耗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)

0 个答案:

没有答案