Getting indices of True values in a boolean list

前端 未结 7 1912
不思量自难忘°
不思量自难忘° 2020-12-07 11:52

I have a piece of my code where I\'m supposed to create a switchboard. I want to return a list of all the switches that are on. Here \"on\" will equal True and

7条回答
  •  太阳男子
    2020-12-07 12:08

    TL; DR: use np.where as it is the fastest option. Your options are np.where, itertools.compress, and list comprehension.

    See the detailed comparison below, where it can be seen np.where outperforms both itertools.compress and also list comprehension.

    >>> from itertools import compress
    >>> import numpy as np
    >>> t = [False, False, False, False, True, True, False, True, False, False, False, False, False, False, False, False]`
    >>> t = 1000*t
    
    • Method 1: Using list comprehension
    >>> %timeit [i for i, x in enumerate(t) if x]
    457 µs ± 1.5 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)
    
    • Method 2: Using itertools.compress
    >>> %timeit list(compress(range(len(t)), t))
    210 µs ± 704 ns per loop (mean ± std. dev. of 7 runs, 1000 loops each)
    
    • Method 3 (the fastest method): Using numpy.where
    >>> %timeit np.where(t)
    179 µs ± 593 ns per loop (mean ± std. dev. of 7 runs, 10000 loops each)
    

提交回复
热议问题