从函数返回数组索引

时间:2018-06-05 04:01:29

标签: python python-3.x function indexing

我有一个数组和函数,我希望函数返回一个索引列表,其中两个连续元素的差异超过阈值。

我有:

def func (y, t=100):
    for i in range(1, len(y)): #Range skips 1st element
        if abs(y[i] - y[i-1]) > t:
            return(i)

我遇到的问题是这个函数只返回我的if语句为true的第一个索引。我如何得到其余的?

3 个答案:

答案 0 :(得分:4)

有两种方法。首先,yield代替return将为您提供生成器:

def func (y, t=100):
    for i in range(1, len(y)): #Range skips 1st element
        if abs(y[i] - y[i-1]) > t:
            yield(i)

或者在你的函数中添加一个列表:

def func (y, t=100):
    output = []
    for i in range(1, len(y)): #Range skips 1st element
        if abs(y[i] - y[i-1]) > t:
            output.append(i)
    return output

答案 1 :(得分:4)

使用list comprehension,您可以这样做:

代码:

def peak_detect(in_data, threshold=100):
    return [i for i, (x, y) in enumerate(zip(in_data, in_data[1:]))
            if abs(y - x) >= threshold]

测试代码:

data = [1, 2000, 2001, 4000]

print(peak_detect(data))

结果:

[0, 2]

答案 2 :(得分:2)

def peak_detect (y_, threshold=100):
    indicesList = []
    for i in range(1, len(y_)): #Range skips 1st element
        if abs(y[i] - y[i-1]) > threshold:
            indicesList.append(i)
    return(indicesList)