我试图编写一个算法,将数组最大值(包括最大值)左右的所有值相加。当满足条件时,求和应停止。例如:
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 data[i + j] > 1:
summ1 = summ1 + data[i + j]
j += 1
while data[i - k] > 1:
summ2 = summ2 + data[i - k]
k += 1
total = summ1 + summ2
这个很好用。但根据情况,这可能会引发IndexError
。例如:
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 data[i + j] > -2:
summ1 = summ1 + data[i + j]
j += 1
while data[i - k] > 1:
summ2 = summ2 + data[i - k]
k += 1
total = summ1 + summ2
现在,我正试图找出一种方法来操纵循环中的条件,直到它可以进入while循环。我想到过这样的事情:
data = [-1, 1, 2, 3, 4, 5, 4, 3, 2, 2, 4, 1, -1]
summ1 = 0
summ2 = 0
j = 1
k = 0
n = 0
while True:
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
但这不起作用,我也不明白为什么。其思想是增加n
,当引发IndexError
时,重新输入try
-语句并检查while
条件是否可以满足(在本例中,如果while data[i + j] > -1:
,那么n == 3
),最后中断while循环。但是它只是不断地增加我的n
,并且while
条件永远不会满足。这是一个非常人为的例子,但我需要知道为什么这不起作用
在当前代码中,
j
永远不会重置为零,第一个while循环将继续抛出索引错误我不清楚这个逻辑的目的是什么,但是重置
j
和k
似乎可以解决索引问题请尝试以下代码:
输出
这是因为当异常发生时,j和k的值不会重置,因此异常会继续发生
在以下情况下检查索引限制:
此解决方案不需要异常处理
发生的情况是,当您递增
j
时,您最终到达数组的末尾(因为所有值都大于-2)。这会触发一个IndexError
(对于您提供的示例数据,您最终搜索的索引是13,但列表中只有13个项目,因此这当然不起作用)递增
n
在代码中不起作用的原因是您从不重置j
。因此,您将n
增加1,但是当您重新进入forloop时,j
已经是8,因此一旦您到达i = 5
,就会再次出现一个IndexError
,它将您发送到except语句,递增n
并重新启动该过程我不知道为什么您首先要使用递增
n
的代码。如果要查找与您的条件匹配的元素的总和,只需在while循环中添加一个简单的检查,这样可以防止索引错误,如下所示:这样,如果
i + j >= len(data)
(否则会触发索引错误),列表甚至不会被索引。你也应该用i - k
部分来做。否则,如果使用负索引,则不会出现索引错误,但会从列表末尾开始添加项如果您想使用递增
n
(我个人认为这是一个奇怪的解决方案),您可以。只需将j = 1
放入外部while循环中:相关问题 更多 >
编程相关推荐