2014-10-30 24 views
0

我寫了一個簡短的函數從我的列表中提供它比某些閾值(此處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 

我想保留那些>=sma_max<=sma_min的的volt_data所有元素,但我不知道寫的語法正確的方法在Python給我一個語法與我寫的第二個版本的錯誤。你會如何寫這or聲明?我也試過用elif而不是or,但它仍然沒有工作。

+0

'volt_data'是列表? – 2014-10-30 11:55:48

+1

檢查結果應該是*之前*冒號:'如果volt_data [q]> = sma_max或volt_data [q] <= sma_min:' – jonrsharpe 2014-10-30 11:56:47

+0

是的。它會更好地浮動嗎? – 2014-10-30 11:57:39

回答

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_maxsma_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" 
0

語法問題是,你的第二個條件應該在:之前。您似乎也只是返回超出範圍的數據,而不在其中。你想

if volt_data[q] <= sma_max and volt_data[q] >= sma_min:  

值得其他的事情指出/不請自來的建議:

  • 回報以相同的順序您在通過他們的名單

    return time_clean, volt_clean 
    
  • 你不需要。在一個範圍內的0。它被視爲默認值。
+0

欣賞提示。我期望保持範圍之外的值,因爲我將範圍內的所有內容都作爲噪聲去除。 – 2014-10-30 12:06:19

+0

好的,沒問題。如果「從列表中刪除數據提供的數據高於某個閾值」稍微含糊不清。 – Holloway 2014-10-30 12:08:35

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