Python判断数组是否含1,2,3序列:我的代码问题出在哪?
关于检查数组中是否存在连续1、2、3序列的代码问题
没错,你必须把return False移出最后一个if的分支,这正是你初始代码出现逻辑错误的核心原因!
为什么初始代码会出错?
你的初始代码里,else: return False嵌套在for循环的if语句中——这意味着只要第一次检查的连续三个元素不匹配[1,2,3],函数就会直接返回False,完全跳过了对后续元素的检查。比如输入数组是[0,1,2,3]时,第一次循环i=0对应的子序列[0,1,2]不匹配,代码就立刻返回False,根本没机会检查i=1时的[1,2,3],这显然不符合你“只要存在连续1、2、3就返回True”的需求。
修改后的代码为什么正确?
修改后的代码把return False放在了for循环的外面:
- 循环会遍历所有可能的连续三个元素(
range(len(nums)-2)确保不会出现数组越界问题); - 只要找到任意一组匹配的
[1,2,3],就立即返回True; - 只有当整个循环跑完,所有可能的子序列都检查过且没有匹配时,才会执行最后的
return False,完美贴合了需求逻辑。
小优化建议(可选)
其实你可以不用提前定义arr1,直接在判断里写目标序列,代码会更简洁:
def array123(nums): if len(nums) < 3: return False for i in range(len(nums)-2): if nums[i:i+3] == [1,2,3]: return True return False
内容的提问来源于stack exchange,提问作者Bowen Liu
相关产品推荐
相关产品推荐

