我写了一些代码,如下所示。用于将数字更改为0和1的Python数据检测器:IndexError:列表索引超出范围
a = [3, 2, 3, 4, 50, 60, 3, 70, 60, 4, 2, 3]
def interval(data):
threshold = 50
n = [0 for i in a]
for i in data:
if data[i] < threshold and data[i+1] < threshold and data[i+2] < threshold :
n[i] = 1
n[i+2] = 1
return n
print (interval(a))
## IndexError: list index out of range
正如你可以看到上面,我有(a)含有一些数据,并且还一个阈值,其是50.在列表中(a)对应到1秒的每个元素的列表。数据是波形的,在这个数据集中有一个峰值。我想要做的是检测波从5(秒)到8(秒)的持续时间。有一点需要注意的是,峰值中的一些数据将低于阈值,但仅在很短的时间内。所以它应该被忽略,仍然被认为是在高峰期。因此,我要做的第一件事就是让峰值中的数据为0,其余(间隔)为1.因此,我在函数内创建一个新列表(n),并尝试在新列表(n)中包含0和1。所以最后的列表(n)应该是[1,1,1,1,0,0,0,0,0,1,1,1]。但是,当我运行上面的代码时,它会给出一个错误“IndexError:列表索引超出范围”。
如果有人知道如何解决这个问题,请告诉我。感谢!
'我在data'不**不生成指数**,**它在元素迭代**,所以'i'将首先采取'3'作为值...您可以用'for in range(len(data)-2)'替换它。 –
非常感谢!请参阅我上面问题的更新。我尝试了范围函数,它有点工作。但是这次它返回列表(n)为[1,1,1,1,0,0,0,0,0,1,0,1],这不是预期的。你可以看一看,看看代码出错了吗?谢谢! – ryan9025