2017-04-01 21 views
-1

这似乎是一个令人尴尬的简单概念,但我不明白为什么这个for循环正在工作的方式。问题是简单地问“给定一个二进制数组,找到这个数组中连续1的最大数目。”这对循环连续整数是如何工作的?

def main(nums): 
count = 0 
for num in nums: 
    if num == 1: 
    count+=1 
    else: 
    count = 0 
main([1,1,0,1,1,1,0,0,1,1,1,1,1]) 

我的问题是,为什么这个循环工作?我期望循环打印1的总数。

+0

为什么你需要的'else'?此外,缩进不是很清楚 –

+1

@MosesKoledoye如果我拿出else语句,那么它将所有1的计数加起来 –

回答

2

这是行不通的。

您不能指望所有1的总和,因为当循环找到零时,它会重置计数器(“else”部分)。

但是,您的代码没有执行预期的操作,在列表末尾添加一个零,您将很容易看到代码失败。

要做到你的要求,在不改变你的代码太多,试试这个

def main(nums): 
    count = maxcount = 0 
    for num in nums: 
     if num == 1: 
      count+=1 
     else: 
      maxcount=max(maxcount, count) 
      count = 0 
    return maxcount 
print(main([1,1,0,1,1,1,1,1,1,0,0,1,1,1,1,0,1])) 

戴夫

1

所不同的是,一旦它看到一个零,它设置的count值回落到零,说这是连续看到那些0。这段代码实际上不起作用 - 它只能在这个输入上运行,因为最长的序列在列表的最后。

一个更好的做法是将current_group的长度和highest_total计数存储在一起。

0

这可能很难相信,但会不会是你想知道为什么这个循环在所有工作的原因是你不熟悉Python遍历列表中的所有元素的能力,不需要任何计数器变量增加它的价值?

[1,1,0,1,1,1,0,0,1,1,1,1,1]

是在Python一种阵列的存储的多个数值。

这里是一些“伪码”仅用于证明"for num in nums"意味着在Python(在编程方面在其它 语言不支持迭代在一个列表/阵列的元件)说明目的:

noOfValuesIn_nums = lengthOf/sizeOf(nums) 
for i = 0 to noOfValuesIn_nums do: 
    # get i=th value from 'nums' and put it to a variable named 'num': 
    num = nums[i] 
    ... 

顺便说一句:在问题中提供的环路给出了提供例如所期望的结果: 主([1,1,0,1,1,1,0,0,1,1,1,1,1 ]) 但不会在另一个工作,如这里演示的:

def main(nums): 
    count = 0 
    for num in nums: 
     if num == 1: 
      count+=1 
     else: 
      count = 0 
    return count 

print(main([1,1,1,1,1,1,0,0,1,1,1,0,1])) 
# it prints 1 instead of 6 

找到下面的代码的人 解决了最长连续序列的任务:

def main1(nums): 
    count = 0 
    maxOnes = 0 
    for num in nums: 
     if num == 1: 
      count+=1 
     else: 
      if count > maxOnes: 
       maxOnes = count 
      count = 0 
    return maxOnes 
print(main1([1,1,1,1,1,1,0,0,1,1,1,0,1])) 
# gives 6