TL; DR:请使用,np.where因为它是最快的选择。您的选择是np.where,itertools.compress和list comprehension。
请参阅下面的详细比较,在那里可以看到np.where性能优于itertools.compress也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
- 方法1:使用
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)
- 方法2:使用
itertools.compress
>>> %timeit list(compress(range(len(t)), t))
210 µs ± 704 ns per loop (mean ± std. dev. of 7 runs, 1000 loops each)
- 方法3(最快的方法):使用
numpy.where
>>> %timeit np.where(t)
179 µs ± 593 ns per loop (mean ± std. dev. of 7 runs, 10000 loops each)
x,然后做,enumerate(x)但是我想我所做的只是枚举4?那是怎么回事吗?感谢您的帮助