【问题标题】:designing the predicate for the filter function为过滤函数设计谓词
【发布时间】:2016-09-23 12:02:58
【问题描述】:

我有这个内置的过滤功能用于我的家庭作业。

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 object not callable。

这是我输入的返回线:

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

这里有什么问题?

【问题讨论】:

    标签: python recursion filter higher-order-functions


    【解决方案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

    【讨论】:

    • 好的,非常感谢!最初我使用了类似 lambda x: road == x[1] 的东西。你建议的想法阻止我打破抽象
    猜你喜欢
    • 1970-01-01
    • 2022-01-09
    • 1970-01-01
    • 2015-01-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多