Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/347.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 编写条件For循环以对列表的子集求和并返回二进制值_Python - Fatal编程技术网

Python 编写条件For循环以对列表的子集求和并返回二进制值

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:

我想把重点放在下面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
项相加,以创建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])