删除不符合两个条件之一的数据

时间:2014-10-30 11:54:00

标签: python if-statement filter

我写了一个简短的函数来删除列表中的数据,只要它高于某个阈值(此处为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,但它仍然无效。

3 个答案:

答案 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
    
  • 你不需要范围内的0。它被视为默认。

答案 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