求替换单个0为1的最长连续1时遇TypeError报错求助
解决「替换0为1后最长连续1个数」代码中的TypeError问题
错误信息
TypeError: 'int' object is not iterable
完整回溯栈
Traceback (most recent call last): File "main.py", line 23, in <module> ans = max(L+R+1) TypeError: 'int' object is not iterable
出错的原代码
A = [0,1, 1, 1, 0, 1, 1, 1, 0 ,1, 0] count = 0 for i in range(0, len(A)): if A[i] == 1: count = count +1 if count == len(A): print(count) ans = 0 for i in range(0, len(A)): if A[i] == 0: L =0 R = 0 for j in range(i-1, 0, -1): if A[j] == 1: L = L +1 else: break for j in range(i+1,len(A)): if A[j] ==1: R = R +1 else: break ans = max(L+R+1) print(ans)
错误原因
max()函数需要传入可迭代对象(比如列表、元组)或者多个参数,但你直接传入了单个整数L+R+1,这就触发了「int不可迭代」的错误。你的需求是更新当前的最大长度,应该拿当前计算出的L+R+1和已有的ans做比较,取最大值。
另外代码还有两个小问题:
- 第一个循环判断数组全为1的情况后,只打印count但没有终止程序,后续代码仍会执行;
- 向左统计连续1的循环
range(i-1, 0, -1)结束值是0,会漏掉索引为0的元素,应该改成range(i-1, -1, -1)才能遍历到第一个元素。
修正后的代码
A = [0,1, 1, 1, 0, 1, 1, 1, 0 ,1, 0] count = 0 for num in A: if num == 1: count +=1 # 全是1的话直接输出并退出 if count == len(A): print(count) exit() max_length = 0 for i in range(len(A)): if A[i] == 0: left = 0 right = 0 # 向左统计连续1的个数 for j in range(i-1, -1, -1): if A[j] == 1: left +=1 else: break # 向右统计连续1的个数 for j in range(i+1, len(A)): if A[j] ==1: right +=1 else: break # 更新最大长度 max_length = max(max_length, left + right + 1) print(max_length)
内容的提问来源于stack exchange,提问作者mayank goley
相关产品推荐
相关产品推荐

