python - 列表中连续零的数量

标签 python list numpy

我有一个由 1 和 0 组成的列表,例如

[0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 1, 0]

我想输出另一个相同长度的列表,其中每个条目代表刚刚消失的连续 0 的数量,即上述示例的输出将是:

[0, 1, 2, 3, 4, 0, 0, 0, 0, 0, 1, 0]

请注意,输出列表的第一个条目将始终为 0,而输入列表的最后一个条目是什么并不重要。

到目前为止我尝试了什么:

def zero_consecutive(input_list):
    output = [0]
    cons = 0
    for i in input_list[:-1]:
        if i == 0:
            cons += 1
            output.append(cons)
        else:
            cons = 0
            output.append(cons)

    return output

它适用于示例,但可能有更有效的方法来涵盖更多边缘情况。

最佳答案

您可以编写生成器函数,然后将其转换为列表,而不是将所有内容附加到列表的函数。一般来说,它更短,在大多数情况下甚至更快(同时做同样的事情)!

def zero_consecutive(input_list):
    yield 0
    cons = 0
    for i in input_list[:-1]:
        if i == 0:
            cons += 1
        else:
            cons = 0
        yield cons

>>> list(zero_consecutive([0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 1, 0]))
[0, 1, 2, 3, 4, 0, 0, 0, 0, 0, 1, 0]

关于python - 列表中连续零的数量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45904003/

相关文章:

python - 将映射函数与多变量函数一起使用

python - 平均 Python 中两个配对列表的重复值

r - 如何检查列表是否包含 R 中的某个元素

python - 在python中的一行内排列

python - 如何根据上下粉色范围查找roi_corners,以便可以在python中使用opencv对其进行模糊处理

python - 在 python 中寻找一些关于组合学的指导

python - 如何查看 matplotlib 旁边的图例?

python - 通过POST方法发送数据以在AJAX请求中显示

python - Pandas DataFrame 删除重复项,保留第一个 'x' 出现的位置

java - 从 ArrayList 中删除重复值