Are there builtin functions for elementwise boolean operators over boolean lists?

28,794

Solution 1

There is not a built-in way to do this. Generally speaking, list comprehensions and the like are how you do elementwise operations in Python.

Numpy does provide this (using &, for technical limitations) in its array type. Numpy arrays usually perform operations elementwise.

Solution 2

Try:

[ x&y for (x,y) in zip(list_a, list_b)]

Solution 3

The numpy.all function does what you want, if you specify the dimension to collapse on:

>>> 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)

Solution 4

No, there are no such built-ins. Your method using zip and all / any is what I would use.

Solution 5

No, I don't believe there's any such function in the standard library... especially when it's so easy to write in terms of the functions that are provided.

Share:
28,794

Related videos on Youtube

bshanks
Author by

bshanks

Updated on July 09, 2022

Comments

  • bshanks
    bshanks almost 2 years

    For example, if you have n lists of bools of the same length, then elementwise boolean AND should return another list of that length that has True in those positions where all the input lists have True, and False everywhere else.

    It's pretty easy to write, i just would prefer to use a builtin if one exists (for the sake of standardization/readability).

    Here's an implementation of elementwise AND:

    def eAnd(*args):
        return [all(tuple) for tuple in zip(*args)]
    

    example usage:

    >>> eAnd([True, False, True, False, True], [True, True, False, False, True], [True, True, False, False, True])
    [True, False, False, False, True]
    
  • DSM
    DSM almost 10 years
    The all function you're referring to isn't a built-in function, though; that's numpy.all.
  • 55651909-089b-4e04-9408-47c5bf
    55651909-089b-4e04-9408-47c5bf almost 10 years
    for me this seems really pythonic and you also don't have to import numpy
  • Zak
    Zak over 6 years
    If at all possible, I'd still recommend numpy, though, as it is orders of magnitude faster, and the syntax is even easier to read: arr1 & arr2 gives you an array of the results.
  • ntg
    ntg over 6 years
    @Zak: I concur, especially if list_a, list_b are long or are already numpy arrays. Otherwise you pay to convert them.
  • user3450049
    user3450049 almost 6 years
    You can also use np.logical_and()