Skip to main content
 首页 » 编程设计

python之列表中连续零的数量

2025年05月04日8dflying

我有一个由 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]