Есть ли встроенные функции для элементарных логических операторов по булевам списков?
-
03-10-2019 - |
Вопрос
Например, если у вас есть в списках Bools одинаковой длины, затем на элементном булеве и должны вернуть другой список этой длины, которая верна в этих позициях, где все входные списки имеют True, и False везде.
Довольно легко писать, я просто предпочел бы использовать встроенный, если он существует (ради стандартизации / читаемости).
Вот реализация элементарных и:
def eAnd(*args):
return [all(tuple) for tuple in zip(*args)]
Пример использования:
>>> eAnd([True, False, True, False, True], [True, True, False, False, True], [True, True, False, False, True])
[True, False, False, False, True]
Решение
Не существует встроенного способа сделать это. Вообще говоря, список списков и тому подобное - это то, как вы делаете элементные операции в Python.
Numpy делает это (используя &
, для технических ограничений) в его массиве типа. Numpy массивы обычно выполняют операции элементарными.
Другие советы
Пытаться:
[ x&y for (x,y) in zip(list_a, list_b)]
То numpy.all
Функция делает то, что вы хотите, если вы укажете измерение для свертывания:
>>> all([[True, False, True, False, True], [True, True, False, False, True], [True, True, False, False, True]], 0)
array([ True, False, False, False, True], dtype=bool)
Нет, таких встроенных нет. Ваш метод использует zip
а также all
/ any
это то, что я бы использовал.
Нет, я не верю, что в стандартной библиотеке есть какая-либо такая функция ... Особенно, когда настолько легко писать с точки зрения предоставленных функций.