用于将数字更改为0和1的Python数据检测器:IndexError:列表索引超出范围

时间:2017-06-18 14:52:20

标签: python indexing

我写了一些代码如下。

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:list index out of range”。

如果有人知道如何解决这个问题,请告诉我。感谢!

1 个答案:

答案 0 :(得分:3)

为什么不使用列表理解

>>> [int(x<50) for x in a]
[1, 1, 1, 1, 0, 0, 0, 1, 1, 1]