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