2017-09-15 4 views
2

これはかなり簡単ですが、私はこの問題に固執しています。
私は論理値、例えばのリストを持っている:連続したインデックスが中に入れて、「真」です「A」の指標Python - 条件に一致する別のリストの要素のインデックスのリスト

a=[True, False, True, True, False, False, True, True, True] 

と私は(サブリストに)を含む別のリストを構築したいです同じサブリストしたがって、上記の例のための答えは次のようになります。

[[0], [2,3], [6,7,8]] 

答えて

6

itertools.groupbyenumerateを使用して、ワンライナーが可能である。同様の静脈で

from itertools import groupby 
[[i for i, _ in g] for k, g in groupby(enumerate(a), key=lambda x: x[1]) if k] 
0

>>> a = [True, False, True, True, False, False, True, True, True] 
>>> from itertools import groupby 
>>> [list(v) for k,v in groupby([_ if a[_] else None for _ in range(len(a)) ], lambda x: not x is None) if k] 
[[0], [2, 3], [6, 7, 8]] 
0

純粋Python、libs:

a=[True, False, True, True, False, False, True, True, True] 

indcs = [i for i, b in enumerate(a) if b] 

if indcs: 
    o, s = [], [indcs[0]] 
    for a, b in zip(indcs, indcs[1:] + [indcs[-1]]): 
     if b-a == 1: 
      s.append(b) 
     else: 
      o.append(s) 
      s = [b] 
else: 
    o = [] 

o  
Out[32]: [[0], [2, 3], [6, 7, 8]] 
関連する問題