Как применить "или" ко всем значениям списка в Python?

Как применить «или» ко всем значениям списка в Python? Я думаю примерно так:

or([True, True, False])

или если это было возможно:

reduce(or, [True, True, False])
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
14
0
4 236
5
Перейти к ответу Данный вопрос помечен как решенный

Ответы 5

Ты можешь сделать это:

reduce(lambda a,b: a or b, [True, True, False])

reduce должно сделать это за вас, не так ли?

>>> def _or(x, y):
...     return x or y
... 
>>> reduce(_or, [True, True, False])
True
Ответ принят как подходящий

Встроенная функция 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(), то их легко реализовать как Гвидо ван Россум предложил:

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
>>> all([True,False,True])
False
>>> any([True,False,True])
True

Python 2.5 и выше (документация)

Никто не упомянул об этом, но "or" доступен как функция в модуле оператора:

from operator import or_

Затем вы можете использовать reduce, как указано выше.

Всегда посоветовал бы "any", хотя и в более поздних версиях Pythons.

Другие вопросы по теме