<p>在缩短的版本中,您需要更改的主要内容是<code>if (a[i:i+6]) > 0:</code>。而且<code>a</code>的长度是12,<code>b</code>的长度是13。编辑1:(根据<a href="https://stackoverflow.com/questions/65025119/could-i-compare-part-of-liste/65025605#comment114960109_65025605">@Steve's comment below</a>)此外,索引<code>range</code>循环也可以从<code>for i in range(6)</code>推广到<code>for i in range(len(a)-5)</code>,因此:</p>
<pre><code>b = np.zeros(len(a))
# b is
# array([0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.])
for i in range(len(a)-5):
if all(a[i:i+6] > 0):
b[i:i+6] = a[i:i+6]
b
# output:
# array([0. , 0. , 0.64, 1.38, 0.69, 0.91, 1.34, 1.03, 1.39, 0.94, 0. , 0. ])
</code></pre>
<p>编辑2,根据<a href="https://stackoverflow.com/questions/65025119/could-i-compare-part-of-liste/65025605?noredirect=1#comment114961222_65025605">@hpaulj's comment</a>,因为<code>a</code>是一个numpy数组,我们不需要迭代切片,因为numpy将对数组(切片)的每个元素应用<code>></code>操作符,并返回一个<code>[</code>True<code>, </code>False<code>, ...]</code>数组。第一个循环看起来是这样的:</p>
<p>例如<code>a[0:0+6] > 0</code>返回<code>array([ True, False, True, True, True, True])</code></p>
<hr/>
<p>一次只检查6个元素的一个显著缺点是,如果是一个较长的连续正数组,则将在下一个循环中填充它,并在<code>b</code>中过度写入相同的值。所以不是很优化。最好对索引进行显式检查,直到得到非正(或结束),并确保当前计数为>;6. </p>