我有一段代码应该在其中创建总机。我想返回所有打开的开关的列表。在这里,“ on”等于True
和“ off”等于False
。因此,现在我只想返回所有True
值及其位置的列表。这就是我所拥有的,但它只返回第一次出现的位置True
(这只是我的代码的一部分):
self.states = [False, False, False, False, True, True, False, True, False, False, False, False, False, False, False, False]
def which_switch(self):
x = [self.states.index(i) for i in self.states if i == True]
这只会返回“ 4”
使用enumerate
,list.index
返回找到的第一个匹配项的索引。
>>> t = [False, False, False, False, True, True, False, True, False, False, False, False, False, False, False, False]
>>> [i for i, x in enumerate(t) if x]
[4, 5, 7]
对于庞大的列表,最好使用itertools.compress
:
>>> from itertools import compress
>>> list(compress(xrange(len(t)), t))
[4, 5, 7]
>>> t = t*1000
>>> %timeit [i for i, x in enumerate(t) if x]
100 loops, best of 3: 2.55 ms per loop
>>> %timeit list(compress(xrange(len(t)), t))
1000 loops, best of 3: 696 µs per loop
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句