列表中连续零的计数

时间:2018-11-10 02:43:35

标签: python list

我试图编写一个通过遍历列表并具有counter = 0来查找此内容的函数,当找到0时counter + = 1,并且当找到第一个非0值时,将启动一个新计数器,而下一个0在列表中将添加到新的计数器,等等。 但是,这不是教授希望如何计算的方式,但是正如我之前提到的,我错过了一个课程,并且正在努力了解如何使用flags / boolean代替

我的程序必须:

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

  2. 给出N和burstList,您的程序应计算零脉冲串的长度,并将其存储在名为BurstLengths的列表中。

  3. 给出列表burstLength,使用while循环打印突发长度列表。

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

让我说:
N = 15
BurstList = [1、0、0、0、0、3、7、0、0、0、0、0、0、5、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)

2 个答案:

答案 0 :(得分: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:
    ???

答案 1 :(得分:0)

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

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

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

  • 如果元素为0,请检查当前列表索引:
    • 如果索引等于列表长度-1,则将1附加到
      输出。
    • 否则,增量计数器并用flag变量通知 您发现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]