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