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?那是怎么回事吗?感谢您的帮助