看起來相當容易,但我有點卡在這一個。
我有邏輯值的列表,如:Python - 與條件匹配的另一個列表的元素索引列表
a=[True, False, True, True, False, False, True, True, True]
,我想構建含有另一個列表(子表)是「真」,在連續指數「A」的指標放在同樣的子列表。所以,上面的例子中,答案將是:
[[0], [2,3], [6,7,8]]
看起來相當容易,但我有點卡在這一個。
我有邏輯值的列表,如:Python - 與條件匹配的另一個列表的元素索引列表
a=[True, False, True, True, False, False, True, True, True]
,我想構建含有另一個列表(子表)是「真」,在連續指數「A」的指標放在同樣的子列表。所以,上面的例子中,答案將是:
[[0], [2,3], [6,7,8]]
使用itertools.groupby
和enumerate
,一個班輪是可能的:
from itertools import groupby
[[i for i, _ in g] for k, g in groupby(enumerate(a), key=lambda x: x[1]) if k]
與此類似,
>>> 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]]
純Python,no 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]]