1. ホーム
  2. python

[解決済み] 真偽値リストにおける真値のインデックスの取得

2022-09-24 12:53:42

質問

私のコードの一部で、スイッチボードを作成することになっているものがあります。私はオンになっているすべてのスイッチのリストを返したいと思います。ここで"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