连续整数的循环如何工作?

时间:2017-04-01 21:28:53

标签: python python-3.x

这似乎是一个令人尴尬的简单概念,但我无法理解为什么这个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的总计数。

3 个答案:

答案 0 :(得分:2)

它只是不起作用。

你不能期望得到所有1的总和,因为当循环找到零时它会重置计数器("否则"部分)。

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

要做你所要求的,而不是过多地改变你的代码,试试这个

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 :(得分:1)

不同之处在于,一旦看到零,它就会将~/Library/Logs/CrashReporter/MobileDevice/[Your_Device_Name]/DiagnosticLogs/sysdiagnose 的值设置回零,并表示它已连续看到0。这段代码实际上并不起作用 - 它只能在这个输入上运气,因为最长的序列位于列表的最后。

更好的做法是存储count的长度和current_group计数。

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