2016-09-23 160 views
1

我在爲我的作業構建過濾函數。設計濾波器函數的謂詞

def filter(pred, seq): 
    if seq ==(): 
     return() 
    elif pred(seq[0]): 
     return (seq[0],) filter(pred, seq[1:]) 
    else: 
     return filter(pred, seq[1:]) 

我們應該是一個給函數轉換爲一個僅具有一個使用所設計的濾波器功能(這將覆蓋更強大的Python版本)回線。

,我們應該要轉換的代碼是這樣的:

def lookup_bus_stop_by_road(stops, road): 
    matched =() 
    for bus_stop in stops: 
     if get_road_name(bus_stop) == road: 
      matched = matched + (bus_stop,) 
    return matched 

我的問題是:我應該如何通過從給定的lookup_bus_Stop_by_road功能適應謂詞轉化爲我的過濾功能?但我總是得到TypeError:bool對象不可調用。

這回油管路我已經把:

def lookup_bus_stop_by_road(stops, road): 
    return filter(get_road_name(bus_stops) == road, stops) 

這裏有什麼問題?

回答

1
get_road_name(bus_stops) == road 

是一個布爾值,而不是函數。你想要做的是創建一個調用get_road_name和檢查功能,如果結果等於road

filter(lambda x: get_road_name(x) == road, stops) 

更多的閱讀關於這個主題在這裏看到:https://docs.python.org/3/tutorial/controlflow.html#lambda-expressions

+0

好吧,謝謝你了!最初我使用了像lambda x:road == x [1]。你提出的想法阻止了我打破抽象 – soignecf