gpt4 book ai didi

python - 计算列表中的连续零

转载 作者:太空宇宙 更新时间:2023-11-03 13:06:44 24 4
gpt4 key购买 nike

我必须编写一个程序,给出一个列表中所有零脉冲的长度(仅包括一个零)。例如

[1, 0, 0, 0, 0, 3, 7, 0, 0, 0, 0, 0, 0, 50, 0]

会给出:
[4, 6, 1]

以下是我迄今为止写的:
listsize = int(input("Please enter the length of the list: "))
burstList = []

for i in range(0, listsize):
N = int(input("Please enter a number: "))
burstList.append(N)

print("Your final list is: ", burstList)

counter = 0
output = []
burst_open = False
for i in range(len(burstList)):
if i == 0:
counter += 1
burst_open = True
else:
if burst_open:
output.append(counter)
counter = 0
burst_open = False
print(output)

我认为这段代码应该可以工作,但是当我在示例列表中运行它时,它只给了我[1]作为输出。任何帮助都将不胜感激!

最佳答案

使用itertools.groupby

In [889]: lst = [1, 0, 0, 0, 0, 3, 7, 0, 0, 0, 0, 0, 0, 50, 0]                                                                                                                                              

In [890]: [len(list(g)) for k, g in itertools.groupby(lst) if k == 0]
Out[890]: [4, 6, 1]

在这里,我们迭代组并在grouper键为0时获取每个组的长度。
在上面,我们从迭代器中创建一个列表来获取长度相反,我们可以通过以下方法获取迭代器的计数,而无需创建中间列表:
In [893]: [sum(1 for _ in g) for k, g in itertools.groupby(lst) if k == 0]                                                                                                                                    
Out[893]: [4, 6, 1]

sum(1 for _ in g)只需使用迭代器并计算元素数,而不需要创建一个新列表来计算其元素数。
就速度而言,两个长度获得的解具有O(n)时间复杂度。但实际上,由于C级循环, list会更快。

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

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com