2017-09-15 4 views
2

Es scheint ziemlich einfach, aber ich bin irgendwie auf diesem fest.
Ich habe eine Liste von logischen Werten, zB:Python - Liste der Indizes der Elemente einer anderen Liste, die eine Bedingung

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

und ich möchte enthält eine weitere Liste erstellen (in Unterlisten) die Indizes von ‚a‘, die ‚True‘, mit aufeinanderfolgenden Indizes setzen in die gleiche Unterliste. Also, für das obige Beispiel wäre die Antwort:

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

Antwort

0

In ähnlicher Weise

>>> 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

rein Python, keine Bibliotheken:

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]] 
Verwandte Themen