2017-09-15 2 views
2

매우 쉽지만이 문제에 집착하고 있습니다.
나는 논리 값의 목록 등이 있습니다Python - 조건과 일치하는 다른 목록의 요소 목록

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

을 나는 연속적인 지표로, '참'이다 'A'의 인덱스를 넣어 (하위 목록)에 포함 된 다른 목록을 구성 할 동일한 하위 목록. 그래서, 위의 예제에 대한 답은 다음과 같습니다

[[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]] 
관련 문제