我想在下面的lyst上关注k
的移动窗口,该窗口从左侧开始,在右侧边缘附近停止一个元素。我想在窗口中取3(k)项的总和。如果总和为>= k/2
,则将值1追加到列表“ pred”,否则将0追加到列表。
到目前为止,这是我的代码:
lyst=[1,0,1,0,1]
k=3
pred=[]
for x in range(0, len(lyst)-k):
sumList=sum(lyst)
if sumList >= k/2:
pred.append(1)
else:
pred.append(0)
print(pred)
我知道我的
sumList
项目是这里的问题。我只需要对其进行调整,以便通常将k
个项目相加即可为pred
创建2个(即len(lyst)-k)新值。根据条件,每个值将为0或1。输出应为:
pred=[1, 0]
我现在得到的输出:
pred=[1,1]
最佳答案
关键部分是仅取所需的lyst
片作为总和。您的起始位置是k
的lyst
元素的左端:
for start in range(0, len(lyst)-k):
sumList = sum(lyst[start:start+k])
这将在
k
元素窗口中依次移动lyst
:[1, 0, 1]
,然后移动[0, 1, 0]
。它们大于k/2
(产生1
)而小于(对于0
)。输出:
[1, 0]
先进的实施
您可以使用(现在已修复的)循环中的代码从内到外构建列表理解。
lyst=[1,1,0,0,1]
k=3
pred = [int(sum(lyst[start:start+k]) >= k/2)
for start in range(0, len(lyst)-k)]