列表中连续零的计数

问题描述 投票:1回答:2

我试图通过循环遍历我的列表并且计数器= 0来找到这个函数,并且当找到0时计数器+ = 1并且当找到第一个非0时,将开始新的计数器并且列表中的下一个0会添加到新的计数器等。然而,这不是我的教授想要这个计算的方式,但正如我之前提到的,我错过了一个类,我正在努力理解如何使用flags / boolean代替

我的计划必须:

  1. 提示用户输入列表的大小(N)。然后提示用户输入N个数字并将它们存储在名为burstList的列表中。
  2. 给定N和burstList,您的程序应计算零突发的长度并将它们存储在名为burstLengths的列表中。
  3. 给定list burstLengths,使用while循环打印突发长度列表。

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

让我们说: N = 15 burstList = [1,0,0,0,0,3,7,0,0,0,0,0,0,0,0]

然后我的列表burstLengths应该包含: [4,6,1]

到目前为止我只有:

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)
python list
2个回答
1
投票

您的作业将占用大约10-20行代码。简而言之,您期望做的是:

  1. 初始化counterflagcounter将计数爆发,flag会让你知道什么时候计算。
  2. 对于x中的每个数字burstList, 检查x是否为0.如果是,请将flag设置为True并增加你的counter。 如果x不等于零,那么检查flag是否仍然是True。如果是,那意味着你需要在counter中保存burstLengths的当前值,重置它,并将flag设置为False

最后,你需要注意这样一个事实:在迭代之后,你可能没有注册最后一个爆发,如果有的话(例如,如果k的最后一个burstList元素是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]

或者,如果你想要一些想法,这里有一些初学者代码,缺少必要的部分:

counter = 0
flag = False
burstLengths = []
for i in burstList:
   if i == 0:
       ???
   else:
       ???

if flag:
    ???

0
投票

解决您问题的另一种方法如下:

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

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

  • 如果元素为0,请检查当前列表索引: 如果索引等于列表长度 - 1,则将1附加到 输出。 否则,incerement计数器并通过标志变量通知您找到0。
  • 否则(如果当前元素不为0): 如果前一个元素为0(foundZero == True),则将计数器追加到输出并将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

运行它:

N=15
burstList=[1, 0, 0, 0, 0, 3, 7, 0, 0, 0, 0, 0, 0, 5, 0]

print(burstLength(burstList))

给您以下结果:

[4, 6, 1]
© www.soinside.com 2019 - 2024. All rights reserved.