У меня есть массив и функция, и я хотел бы, чтобы функция возвращала список индексов, в которых разница двух последовательных элементов превышает пороговое значение.
У меня есть:
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 истинен. Как мне получить остальные?
Не возвращай. Просто запечатлейте это.






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)
Есть два пути. Во-первых, 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
С понимание списка вы можете сделать это следующим образом:
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]
yield iи собирать элементы вlist(другими словами, преобразовать вашу функцию в функцию генератора)