lis中连续零的计数

2024-06-28 16:20:58 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图编写一个函数来查找这个函数,方法是循环遍历我的列表,使计数器=0,当找到0时,计数器+=1,当找到第一个非0时,一个新计数器将启动,列表中的下一个0将添加到新计数器中,等等。。 然而,这并不是我的教授想要的计算方法,但正如我前面提到的,我错过了一节课,并且正在努力理解如何使用标志/布尔值

我的课程必须:

  1. 提示用户输入列表的大小(N)。然后提示用户输入N个数字并将它们存储到名为burstList的列表中。

  2. 给定N和burstList,您的程序应该计算出0的突发长度,并将它们存储在一个名为burstlength的列表中。

  3. 给定list burstlength,使用while循环打印突发长度列表。

我的教授希望我们“合并标志和布尔数据类型。使用循环遍历列表,找到0后,将标志设置为true并使用计数器递增。使用一个稍后可以为每个突发事件附加计数器的列表“

假设我有:
N=15
burstList=[1,0,0,0,3,7,0,0,0,0,0,0]

那么我的列表长度应该包含:
[6,4]

到目前为止,我只有:

burstList = []
N = int(input("Enter the length of the list: "))

def listSize():
>for i in range(N):
>>value = int(input("Enter integer value "+str(i+1)+": "))
>>burstList.append(value)
>print("List = ", burstList)

Tags: the方法函数用户列表inputvalue标志
2条回答

你的作业大约需要10-20行代码。简而言之,您需要做的是:

  1. 初始化counterflagcounter将计数突发事件,flag将告诉您何时计数。在
  2. 对于burstList中的每个数字x
    • 检查x是否为0。如果是,请将flag设置为True,并增加counter。在
    • 如果x不等于零,则检查flag是否仍然是{}。如果是,那就意味着您需要将counter的当前值保存在burstLengths内,重置它,并将flag设置为False。在

最后,您需要注意这样一个事实:在迭代之后,您可能没有注册最后一个突发,如果有的话(例如,如果burstList的最后一个k元素是0)。所以你必须处理好。在

因为这是一个任务,所以这里有一个解决方案,它使用了您不能提交的代码,只是为了演示:-)

import pandas as pd
v = pd.Series(burstList).eq(0)
_, burstLengths = pd.np.unique(
    v.ne(v.shift()).cumsum().where(v).dropna(), return_counts=True)

print(burstLengths.tolist())
[4, 6, 1]

或者,如果您想知道一些想法,下面是一些缺少基本部分的入门代码:

^{pr2}$

另一个问题是你的方法:

1)获取输入列表的长度并初始化输出列表、计数连续0数的计数器值以及在找到0时要设置的标志变量。在

2)对于列表中的每个元素:

  • 如果元素为0,请检查当前列表索引:
    • 如果索引等于列表长度-1,则将1附加到
      输出。在
    • 否则,启动计数器并用标志变量通知 您找到了0。在
  • Else(如果当前元素不是0):
    • 如果前一个元素是0(foundZero==True),则将counter追加到 输出并将foundZero设置为False。在

3)最后,返回输出列表。在

下面的代码实现了上述算法:

def burstLength(burstList):
    counter = 0
    output = []
    length = len(burstList)
    foundZero = False
    for i in range(length):
        if burstList[i]==0:
            if i==length-1:
                output.append(1)
            else:
                counter += 1
                foundZero = True
        else:
            if foundZero:
                output.append(counter)
                counter = 0
                foundZero = False
    return output

运行它:

^{pr2}$

得到以下结果:

[4, 6, 1]

相关问题 更多 >