Python 编写条件For循环以对列表的子集求和并返回二进制值
我想把重点放在下面lyst中的Python 编写条件For循环以对列表的子集求和并返回二进制值,python,Python,我想把重点放在下面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:
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
项相加,以创建2个新值(即len(lyst)-k)到pred
。根据情况,每个值将为0或1
输出应为:
pred=[1, 0]
我现在得到的输出:
pred=[1,1]
关键部分是只取所需的
lyst
片段作为您的总和。您的起始位置是lyst
的k
元素的左端:
for start in range(0, len(lyst)-k):
sumList = sum(lyst[start:start+k])
这将通过lyst
移动k
-元素窗口:[1,0,1]
,然后[0,1,0]
。这些值大于k/2
(产生1
),小于0
)
输出:
[1, 0]
高级实施 您可以使用(现已修复)循环中的代码从内到外构建列表理解
首先,您的代码中有一个错误:
对于范围(0,len(lyst)-k)内的x
将迭代len(lyst)-k
第一项而不是最后一项
您可以阅读有关函数的内容,了解它是如何工作的。表示可以使用,以便获取所需元素的总和
您可以将代码更改为:
for x in range(len(lyst) - 1, len(lyst) - k, -1):
sumList=sum(lyst[x-k:x])
你的描述没有用英语解析;你缺少标点符号,也许还有几个单词。请显示您期望的输出和获得的输出。描述与这些值相关的过程。这应该可以澄清问题。为什么输出是
0,1
?在我看来应该是相反的。如果我们加上前3个位置,总和大于k/2;位置1-3之和较小。因此,输出将是[1,0]
。我的误解是什么?是的,但我们并没有将总和添加到新列表“pred”中。赋值是在总和符合条件的情况下将二进制值添加到列表“pred”中。条件是,如果x之前的3项总和大于k/2,则将0或1添加到列表中。我不会将总和添加到pred
;我正试着按照你的指示去做。前三个元素的总和为1+0+1=2
这比k/2
大,因此结果应该是1
。您的更新告诉我这应该是0
。类似地,第二个是0+1+0=1
,小于k/2,k/2应该是0
。我不理解这个过程。对不起,用户错误。Pred应该是[1,0]。谢谢你这么做!我知道这是一笔让我悲伤的款项。@GBOFI:我花了一些对话才得出这个想法。我编辑以澄清。
for x in range(len(lyst) - 1, len(lyst) - k, -1):
sumList=sum(lyst[x-k:x])