我有一个包含以下数字的列表:
[0, 0, 0, 0, 1, 1, 0, 0, 1]
我想要做的是计算我有多少个连续的1,并生成一个新的列表,如下所示:
[0, 0, 0, 0, 1, 2, 0, 0, 1]
是否有一种比这种方法更紧凑的方法?
lst = [0, 0, 0, 0, 1, 1, 0, 0, 1]
new_lst = []
counter = 0
for i in range(len(lst)):
if (lst[i] == 1): counter+=1
else:counter = 0
new_lst.append(counter)
print(new_lst)
如果使用python 3.8或更高版本,可以利用walrus操作符:
[counter := counter + 1 if v else 0 for v in lst]
或者itertools.accumulate
:
[v for v in itertools.accumulate(lst, lambda acc, v:acc + v if v else 0)]
两种情况的结果都是:
[0, 0, 0, 0, 1, 2, 0, 0, 1]
它没有问题的解决方案那么紧凑,但它更清楚:
l = [0, 0, 0, 0, 1, 1, 0, 0, 1]
s = []
occ = 0
for i in l:
occ = occ+1 if i==1 else 0
s.append(occ)
print(s)
输出:
[0, 0, 0, 0, 1, 2, 0, 0, 1]