您将如何使用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)