2016-01-27 6 views
-1

Проблема очень проста: я даю список и условие, если хотя бы один элемент в списке не подчиняется условию, что программа должна возвращать False, если все они подчиняются условию, которое оно должно возвращать Правда, пока я могу использовать только один инструкции возврата Мой код:Функциональный Python со списками

def todos_lista(lista, guarda): 
    for x in lista: 
    return(False if guarda(x)==False else True) 

ответ

4

Вы должны использовать all:

def todos_lista(lista, guarda): 
    return all(guarda(x) for x in lista) 

Или в более функционально:

def todos_lista(lista, guarda): 
    return all(map(guarda, lista)) 

Например, для диапазона от 0 до 9 (range(10)):

>>> all(x < 10 for x in range(10)) 
True 
>>> all(x < 9 for x in range(10)) 
False 
>>> all(map(lambda x: x < 9, range(10))) 
False 
>>> all(map(lambda x: x < 10, range(10))) 
True 
+0

Я не знал, что функция питона, но спасибо за говоря, что, но теперь он представляет ошибку, говорящий о том, что объект Bool не является итерабельным. – Pmsmm

+0

Это означает, что guarda не является функцией, которая берет ввод и возвращает логическое значение – JuniorCompressor

+0

@Pmsmm. Кажется, вы передаете ему одно значение, а не список. – bereal

1

any будет делать эту работу, а также:

def todos_lista(lista, guarda): 
    return not any(not guarda(x) for x in lista) 
+0

Не должно быть «не нужно» для выполнения требования? – bereal

+0

@bereal ... на самом деле это должно быть 'не any (а не x для x в l)' ... такое же, как 'a и b и c == not (не a или b или не c)' ... слишком сложно, я думаю! –

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