我有一个由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)
它适用于该示例,但可能有更有效的方法来涵盖更多边缘情况.
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)
归档时间: |
|
查看次数: |
146 次 |
最近记录: |