2016-09-23 108 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