<p>发生的情况是,当您递增<code>j</code>时,您最终到达数组的末尾(因为所有值都大于-2)。这会触发一个<code>IndexError</code>(对于您提供的示例数据,您最终搜索的索引是13,但列表中只有13个项目,因此这当然不起作用)</p>
<p>递增<code>n</code>在代码中不起作用的原因是您从不重置<code>j</code>。因此,您将<code>n</code>增加1,但是当您重新进入forloop时,<code>j</code>已经是8,因此一旦您到达<code>i = 5</code>,就会再次出现一个<code>IndexError</code>,它将您发送到except语句,递增<code>n</code>并重新启动该过程</p>
<p>我不知道为什么您首先要使用递增<code>n</code>的代码。如果要查找与您的条件匹配的元素的总和,只需在while循环中添加一个简单的检查,这样可以防止索引错误,如下所示:</p>
<pre class="lang-py prettyprint-override"><code>import numpy as np
data = [-1, 1, 2, 3, 4, 5, 4, 3, 2, 2, 4, 1, -1]
summ1 = 0
summ2 = 0
j = 1
k = 0
n = 0
for i in range(len(data)):
if data[i] == np.amax(data):
while i + j < len(data):
if data[i + j] > -2:
summ1 = summ1 + data[i + j]
j += 1
else:
break
while i - k >= 0:
if data[i - k] > 1:
summ2 = summ2 + data[i - k]
k += 1
else:
break
total = summ1 + summ2
</code></pre>
<p>这样,如果<code>i + j >= len(data)</code>(否则会触发索引错误),列表甚至不会被索引。你也应该用<code>i - k</code>部分来做。否则,如果使用负索引,则不会出现索引错误,但会从列表末尾开始添加项</p>
<p>如果您想使用递增<code>n</code>(我个人认为这是一个奇怪的解决方案),您可以。只需将<code>j = 1</code>放入外部while循环中:</p>
<pre class="lang-py prettyprint-override"><code>data = [-1, 1, 2, 3, 4, 5, 4, 3, 2, 2, 4, 1, -1]
n = 0
while True:
summ1 = 0
summ2 = 0
j = 1
k = 0
try:
for i in range(len(data)):
if data[i] == np.amax(data):
while data[i + j] > -2 + n:
summ1 = summ1 + data[i + j]
j += 1
while data[i - k] > 3:
summ2 = summ2 + data[i - k]
k += 1
total = summ1 + summ2
break
except IndexError:
n = n + 1
</code></pre>