思い付きです。解説はしません。
Python
1import re
2
3
4src = [4,4,2,4,5,3,1,3,4,1,2,2,3]
5assert all(len(str(e)) == 1 for e in src) # srcの全要素は1桁
6
7dst = [
8 [*range(m.start(), m.end())]
9 for m in re.finditer(r'12*', ''.join(map(str, src)))
10]
11
12
13print(dst)
実行結果 Wandbox
コメントを受けて
例えば、こんなふうに。
Python
1dst = []
2
3i = 0
4while i < len(src):
5 if src[i] != 1:
6 i += 1
7 continue
8
9 dst.append([i])
10 i += 1
11
12 while i < len(src) and src[i] == 2:
13 dst[-1].append(i)
14 i += 1
for文を使うなら二回に分けた方が無駄が少ないように思います。
Python
1dst = []
2
3it = (
4 i for i, e in enumerate(src)
5 if e == 1
6)
7for index_1 in it:
8 dst.append([index_1])
9
10 idx = index_1 + 1
11 for i, e in enumerate(src[idx:], start=idx):
12 if e != 2:
13 break
14
15 dst[-1].append(i)
さらに追記
普通に読み辛いですし効率面も特段良くありませんが、個人的にはこういうのが好きです。
おまけです。
Python
1indice_1 = (
2 i for i, e in enumerate(src)
3 if e == 1
4)
5dst = [
6 [idx, *map(operator.itemgetter(0), zip(
7 itertools.count(idx+1),
8 itertools.takewhile(
9 lambda e: e == 2, src[idx+1:]
10 )
11 ))]
12 for idx in indice_1
13]
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/05/10 05:09
2021/05/10 05:14
2021/05/10 06:19
2021/05/10 06:33
2021/05/10 07:23