我试图编写一个通过遍历列表并具有counter = 0来查找此内容的函数,当找到0时counter + = 1,并且当找到第一个非0值时,将启动一个新计数器,而下一个0在列表中将添加到新的计数器,等等。 但是,这不是教授希望如何计算的方式,但是正如我之前提到的,我错过了一个课程,并且正在努力了解如何使用flags / boolean代替
我的程序必须:
提示用户输入列表的大小(N)。然后提示用户输入N个数字,并将其存储到名为BurstList的列表中。
给出N和burstList,您的程序应计算零脉冲串的长度,并将其存储在名为BurstLengths的列表中。
给出列表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)
答案 0 :(得分:1)
您的作业大约需要10-20行代码。简而言之,您应该做的是:
counter
和flag
。 counter
将对突发计数,而flag
将让您知道何时计数。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)对于列表中的每个元素:
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]