Python for循环实现print_matching_indexes函数的调试求助
现有代码的核心错误定位
- 遍历维度完全错位:当前的
for i in items循环,每次迭代拿到的是列表里的元素值(比如'dog'、'cat'),全程没有关联任何位置索引,从根源上没法输出目标索引 - 方法未执行触发:代码里写的
items.index只是引用了list内置的index方法对象本身,没有加调用括号执行方法,解释器自然只会打印这个方法的内存地址,不会执行查找逻辑 - 缺少目标匹配判断:整个代码没有设置“元素等于target才打印”的判断分支,就算前面两个问题修正,也会把所有元素的索引全部输出,不符合只打印匹配位置的要求
- 内置方法的隐性缺陷:就算后续补上括号正确调用
items.index(元素值),这个方法默认只会返回目标元素第一次出现的索引,遇到重复出现的target(比如示例里的两个'cat'),永远无法拿到第二个位置的3,根本满足不了需求
符合题目要求的实现方案
题目要求在for循环遍历的场景下完成功能,两种完全适配要求的实现方式:
- 手动维护索引计数器
遍历过程中手动记录当前位置的索引值,每检查完一个元素就把索引值加1,匹配到target时直接打印当前计数器值:def print_matching_indexes(items, target): """Prints the indexes of all (target) in the list (items)""" index_counter = 0 for element in items: if element == target: print(index_counter) index_counter += 1 - 基于列表长度的索引遍历
用range(len(items))生成覆盖所有合法索引的序列,直接通过索引访问列表元素做匹配判断:def print_matching_indexes(items, target): """Prints the indexes of all (target) in the list (items)""" for idx in range(len(items)): if items[idx] == target: print(idx)
效果验证
运行题目给出的测试用例:
pets = ['dog', 'cat', 'fish', 'cat', 'dog', 'iguana'] print_matching_indexes(pets, 'cat')
两种实现都会准确输出1、3两行结果,完全匹配预期。
内容的提问来源于stack exchange,提问作者coschal
相关产品推荐
相关产品推荐

