2016-09-23 3 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:]) 

Мы должны преобразовать функцию дать тот, который имеет только один обратку, используя разработанную функцию фильтра (который перезаписывает более мощный питона версии).

Код, который мы должны преобразовать это:

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

Хорошо спасибо так много! Сначала я использовал что-то вроде лямбда x: road == x [1]. Идея, предложенная вами, не позволяет мне нарушить абстракцию – soignecf

Смежные вопросы