Вернуть индексы массива из функции - PullRequest
0 голосов
/ 05 июня 2018

У меня есть массив и функция, и я хотел бы, чтобы функция возвращала список индексов, в которых разница двух последовательных элементов превышает пороговое значение.

У меня есть:

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 истинно.Как мне получить остальные из них?

Ответы [ 3 ]

0 голосов
/ 05 июня 2018

Есть два пути.Во-первых, 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
0 голосов
/ 05 июня 2018

С помощью списка вы можете сделать это следующим образом:

Код:

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]
0 голосов
/ 05 июня 2018
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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...