2015-02-10 6 views
1

Я пытаюсь запустить некоторую функцию, если список логических значений является истинным. Мой список состоит из булевых функций.Проверка наличия условий в булевом списке

list = [file.endswith('05',21,22), file.endswith('11',21,22), 
     file.endswith('17',21,22), file.endswith('21',21,22), 
     file.endswith('23',21,22)] 

if any(True in list) == True:   
    # do something 

В настоящее время, если статья дает мне ошибку

if any(True in list) == True: 
TypeError: 'bool' object is not iterable 

Не совсем уверен, как это исправить.

+0

Не затенять 'list' встроенный. – kojiro

ответ

4

any ожидает итеративный аргумент, который затем пропустит, чтобы узнать, оценивает ли какой-либо его элемент значение True. Кроме того, выражение True in list возвращает не Iterable логическое значение:

>>> lst = [False, True, False] 
>>> True in lst 
True 
>>> 

Чтобы решить эту проблему, вы должны просто передать список any:

if any(list): 

Вы также должны воздерживаться от принятия USER- определенное имя, такое же, как и один из встроенных. Это затмевает встроенный и делает его непригодным для использования в текущей области.

1

любые (итерация):

Возвращает True, если любой элемент Iterable верно. Если итерабельность пуста, верните False.

Ваш код должен использовать:

if any(list): 
1

Обратите внимание, что ваш код намного короче, если записать в виде:

if any(file.endswith(suffix, 21, 22) 
     for suffix in ['05', '11', '17', '21', '23']): 
Смежные вопросы