次のようなゼロと 1 のリストがあります。
lst = [0, 1, 1, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 1, 0, 1, 1]
この lst を次のように変換するにはどうすればよいですか。
transformed_lst = lst = [0, 1, 1, 1, 1, 0, 0, 0, 2, 2, 0, 0, 0, 3, 0, 4, 4]
基本的に、1 が出現するたびに、それを n+1 整数に変換します。itertools/groupby/functools でこれを行うエレガントな方法があると確信しています。ここに試みがありますが、完全には正しくありません:
from itertools import cycle
ints = cycle(range(len(lst)))
transformed_lst = [next(ints) if i != 0 in lst else 0 for i in lst]
>>> [0, 0, 1, 2, 3, 0, 0, 0, 4, 5, 0, 0, 0, 6, 0, 7, 8]