我的零和一的名單,看起來像這樣:增量列表
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來完成。這是一種嘗試,但並不完全正確的:使用itertools.count()
,itertools.chain()
和itertools.groupby()
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]
沒有,'map'不會做。它將一個函數應用於列表,但在這裏您需要一些狀態來記憶兩次調用。這不是很好地處理一個函數。發電機功能應該非常適合。 – Ber