Python列表range遍历下For循环无法多次循环,预期返回true实际得到false
问题成因
- 类型匹配错误:代码中使用
a[x:x+1]切片得到的是列表类型,直接和整数b=1、c=2做相等判断永远为False,比如1 == [1]的执行结果就是False。 - 循环提前终止:
return False被写在了for循环的else分支中,循环第一次执行时不管条件是否满足,都会直接返回结果,根本不会执行后续的循环迭代,自然找不到列表末尾的[1,2]匹配项。 - 边界值遗漏:如果用
range(len(a))生成循环下标,当x取到列表最后一个下标时,x+1会超出列表下标范围,会触发索引越界报错。
修复方案
修改两处核心逻辑:一是把列表切片改为取下标对应的单个元素,二是把返回False的逻辑移到for循环外部,遍历完全部元素没匹配到再返回,同时调整循环范围避免越界。
修复后的代码如下:
def thing(a): b = 1 c = 2 # 循环范围调整为len(a)-1,避免x+1越界 for x in range(len(a)-1): if b == a[x] and c == a[x+1]: return True # 所有元素遍历完没匹配到再返回False return False print(thing([1,3,4,1,2]))
运行后会正确返回True。
内容的提问来源于stack exchange,提问作者Lifeable
相关产品推荐
相关产品推荐

