ブールリスト内のTrue値のインデックスを取得する 質問する

ブールリスト内のTrue値のインデックスを取得する 質問する

コードの一部に、スイッチボードを作成する部分があります。オンになっているすべてのスイッチのリストを返したいです。ここで、「オン」は に等しくTrue、「オフ」は に等しくなります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」のみを返します

ベストアンサー1

を使用するとenumeratelist.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

おすすめ記事