2013-12-21 100 views
0

我有一些困難,計算列表的多個範圍。 以下是我已經嘗試:應用一個範圍同時計算多個範圍

import numpy as np 
k=[[0.0234,0.131,0.475,0.393,0.620],[0.0234,0.131,0.475,0.393,0.620]] 
tak=[] 
def thresh(a,b): 
    for x in k: 
     m=[val for val in x if a<=val<=b] 
     tak.append(m) 
    return tak 


t1=np.arange(0.1,0.4,0.1) 
for x in t1: 
    t2=thresh(x,0.5) 
print t2 

Output obtained:[[0.131, 0.475, 0.393], [0.131, 0.475, 0.393], [0.475, 0.393], [0.475, 0.393], [0.475, 0.393], [0.475, 0.393], [0.475], [0.475]] 

Desired Output:[[[0.131, 0.475, 0.393],[0.475, 0.393],[0.475, 0.393],[0.475]],[[0.131, 0.475, 0.393],[0.475, 0.393],[0.475, 0.393],[0.475]]] 

在代碼的問題是,它計算範圍同時上兩個列表,而不是在一次解決一個列表。

有關如何解決此問題的任何建議?謝謝。在錯誤的順序

回答

2

您的循環評估順序不正確。你需要確保你在迭代什麼以及按照什麼順序,因爲它最終會影響你的輸出結構。

這裏是爲了修正後的可能的實現

k=[[0.0234,0.131,0.475,0.393,0.620],[0.0234,0.131,0.475,0.393,0.620]] 
t1=np.arange(0.1,0.4,0.1) 
def thresh(k, start, end): 
    for x in k: 
     yield [[val for val in x if s<=val<=end] for s in start] 


list(thresh(k, t1,0.5)) 
[[[0.131, 0.475, 0.393], [0.475, 0.393], [0.475, 0.393], [0.475]], [[0.131, 0.475, 0.393], [0.475, 0.393], [0.475, 0.393], [0.475]]] 
+0

非常感謝您的解決方案。,它的工作原理。我會仔細看看我的循環。 – Tiger1

1

你循環,得到所需的必須由子表申請treshold結果:

def thresh(lst, a,b): 
    return [val for val in lst if a<=val<=b] 

def apply_tresh(lst, starts, stop): 
    rv = [] 
    for sublst in lst: 
     sublv = [] 
     for start in starts: 
      sublv.append(thresh(sublst, start, stop)) 
     rv.append(sublv) 
    return rv 

演示:

>>> apply_tresh(k, np.arange(0.1,0.4,0.1), 0.5) 
[[[0.131, 0.475, 0.393], [0.475, 0.393], [0.475, 0.393], [0.475]], [[0.131, 0.475, 0.393], [0.475, 0.393], [0.475, 0.393], [0.475]]] 
+0

感謝您的回答,它工作正常。 – Tiger1

0

那麼它看起來對我來說它按預期工作。 thresh函數將您的k列表的成員僅篩選到[a,b]中的成員。所以

x = 0.1;只包括0.1和0.5之間的數字

[[0.131,0.475,0.393], [0.131,0.475,0.393]] 

x=0.2:[[ 0.475, 0.393], [0.475,0.393]] 

等等。

我不能告訴你如何得到你想要的輸出。

+0

感謝您的迴應,但是我獲得的輸出不是我想要的輸出。代碼中的問題是,它同時計算兩個列表的範圍,而不是一次處理一個列表。 – Tiger1