Python列表元素访问疑问:两种判断逻辑为何结果不同?
为什么你的列表检查代码会出现测试用例失败?
这问题核心是你搞混了Python中列表遍历的两种方式:遍历元素值和遍历索引,咱们一步步拆解:
原代码的逻辑问题
你最初的代码:
a = [filled with something] for element in a: if element is 5: return "YES" return "NO"
这里的for element in a是直接迭代列表a里的每一个元素的值。比如如果a = [2,5,7],element会依次取2、5、7,这时候碰到5就返回YES,逻辑是「检查列表中是否存在值为5的元素」。
那为什么部分测试用例失效?因为你的实际需求根本不是这个——你真正想做的是检查「某个索引对应的元素是否为5」,而不是检查元素值本身。
修改后代码为什么正常?
当你把判断改成if a[element] is 5时,相当于把当前遍历到的element当作列表的索引,去取a中对应位置的元素,再判断这个元素是否为5。比如假设你的测试用例是a = [1,3,4,5,2,5],当element遍历到5时,你取的是a[5](也就是索引5的元素,值为5),这时候返回YES,完全符合你实际的需求。
额外的两个小提醒
- 如果你本来就是想遍历索引,更规范的写法是用
range(len(a))或者enumerate,比如:for idx in range(len(a)): if a[idx] == 5: return "YES" return "NO" - 尽量用
==代替is来判断值相等:is检查的是两个对象的内存地址是否一致,对于小整数Python有缓存机制可能没问题,但对于其他类型或者大整数容易出问题,==才是专门用来判断值相等的操作符。
内容的提问来源于stack exchange,提问作者Martin Chu
相关产品推荐
相关产品推荐

