我有一个数组和函数,我希望函数返回一个索引列表,其中两个连续元素的差异超过阈值。
我有:
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的第一个索引。我如何得到其余的?
答案 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)