Как вы применяете "или" ко всем значениям списка в Python? Я думаю что-то вроде:
or([True, True, False])
или если это было возможно:
reduce(or, [True, True, False])
Как вы применяете "или" ко всем значениям списка в Python? Я думаю что-то вроде:
or([True, True, False])
или если это было возможно:
reduce(or, [True, True, False])
Встроенная функция any
делает то, что вы хотите:
>>> any([True, True, False])
True
>>> any([False, False, False])
False
>>> any([False, False, True])
True
any
имеет преимущество перед reduce
сокращать тест для последующих элементов в последовательности, как только он найдет истинное значение. Это может быть очень удобно, если последовательность представляет собой генератор с дорогой операцией за ним. Например:
>>> def iam(result):
... # Pretend this is expensive.
... print "iam(%r)" % result
... return result
...
>>> any((iam(x) for x in [False, True, False]))
iam(False)
iam(True)
True
>>> reduce(lambda x,y: x or y, (iam(x) for x in [False, True, False]))
iam(False)
iam(True)
iam(False)
True
Если ваша версия Python не имеет встроенных функций any()
, all()
, то они легко реализуются как Guido van Rossum предложил:
def any(S):
for x in S:
if x:
return True
return False
def all(S):
for x in S:
if not x:
return False
return True
Никто не упомянул об этом, но "or
" доступен как функция в модуле оператора:
from operator import or_
Затем вы можете использовать reduce
, как указано выше.
Всегда советовал бы "any
", хотя в более поздних Python.
>>> all([True,False,True])
False
>>> any([True,False,True])
True
Python 2.5 и выше (документация)
Вы можете сделать это:
reduce(lambda a,b: a or b, [True, True, False])
уменьшить должно сделать это для вас, не так ли?
>>> def _or(x, y):
... return x or y
...
>>> reduce(_or, [True, True, False])
True