我写了一个简短的函数来删除列表中的数据,只要它高于某个阈值(此处为0.04),它的工作原理如下:
def remove_noise(time_data, volt_data):
volt_clean = []
time_clean = []
for q in range(0, len(volt_data)):
if volt_data[q] >=0.04:
time_clean.append(time_data[q])
volt_clean.append(volt_data[q])
return volt_clean, time_clean
我想要做的是,而不是有一个阈值,检查数据是否大于一个值或低于我传递给函数的另一个值。这是我到目前为止所写的内容:
def remove_noise(time_data, volt_data, sma_max, sma_min):
volt_clean = []
time_clean = []
for q in range(0, len(volt_data)):
if volt_data[q] >=sma_max:
or volt_data[q] <=sma_min
time_clean.append(time_data[q])
volt_clean.append(volt_data[q])
return volt_clean, time_clean
我想保留volt_data
或>=sma_max
<=sma_min
的所有元素,但我不确定编写语法的正确方法,因为Python会给我一个语法错误我写的第二个版本。你会怎么写这个or
声明?我还尝试使用elif
代替or
,但它仍然无效。
答案 0 :(得分:1)
这里有语法错误
if volt_data[q] >=sma_max:
or volt_data[q] <=sma_min
试试这个
if volt_data[q] >= sma_max or volt_data[q] <= sma_min:
## do Something here
或者,如果您想检查volt_data[q]
和sma_max
之间是否有sma_min
,那么
if sma_max <= volt_data <= sma_min:
## do something here
另外我建议您使用如下所示的代替for q in range(0, len(volt_data)):
,因为它更像pythonic。仔细考虑一下。
volt_data = [2,0.4,0.02,0.05]
for q in volt_data: # instead of for q in range(0, len(volt_data))
if q >= 0.04:
print "Above threshold"
else:
print "Below threshold"
答案 1 :(得分:0)
语法问题是你的第二个条件应该在:
之前。您似乎也只返回超出范围的数据。你想要
if volt_data[q] <= sma_max and volt_data[q] >= sma_min:
值得指出的其他事项/未经请求的建议:
按照您传递的顺序返回列表。
return time_clean, volt_clean
答案 2 :(得分:0)
只需纠正你的缩进,休息就可以了:
def remove_noise(time_data, volt_data, sma_max, sma_min):
volt_clean = []
time_clean = []
for q in range(0, len(volt_data)):
if volt_data[q] >=sma_max or volt_data[q] <= sma_min :
time_clean.append(time_data[q])
volt_clean.append(volt_data[q])
return volt_clean, time_clean