Есть ли встроенные функции для элементарных логических операторов по булевам списков?

StackOverflow https://stackoverflow.com/questions/2770434

Вопрос

Например, если у вас есть в списках 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 это то, что я бы использовал.

Нет, я не верю, что в стандартной библиотеке есть какая-либо такая функция ... Особенно, когда настолько легко писать с точки зрения предоставленных функций.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top