列表中的连续零数

Imr*_*ran 1 python numpy list

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

[0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 1, 0]
Run Code Online (Sandbox Code Playgroud)

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

[0, 1, 2, 3, 4, 0, 0, 0, 0, 0, 1, 0]
Run Code Online (Sandbox Code Playgroud)

请注意,输出列表的第一个条目将始终是,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
Run Code Online (Sandbox Code Playgroud)

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

MSe*_*ert 6

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

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]
Run Code Online (Sandbox Code Playgroud)