我有一份 list ,上面有以下编号:

[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 operator:

[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]

Python相关问答推荐

Select 用a和i标签包裹的复选框?

计算每个IP的平均值

pandas在第1列的id,第2列的标题,第3列的值,第3列的值?

可以bcrypts AES—256 GCM加密损坏ZIP文件吗?

在pandas数据框中计算相对体积比指标,并添加指标值作为新列

Python全局变量递归得到不同的结果

如何在BeautifulSoup/CSS Select 器中处理regex?

将标签移动到matplotlib饼图中楔形块的开始处

在二维NumPy数组中,如何 Select 内部数组的第一个和第二个元素?这可以通过索引来实现吗?

不允许 Select 北极滚动?

使用tqdm的进度条

在极点中读取、扫描和接收有什么不同?

Python Mercury离线安装

numpy数组和数组标量之间的不同行为

如何重新组织我的Pandas DataFrame,使列名成为列值?

对于数组中的所有元素,Pandas SELECT行都具有值

将Pandas DataFrame中的列名的长文本打断/换行为_STRING输出?

在不降低分辨率的情况下绘制一组数据点的最外轮廓

Django查询集-排除True值

保存由PYTHON在EXCEL中所做更改的问题