我想在下面的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片作为总和。您的起始位置是klyst元素的左端:

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)]

10-08 04:54