Python递归实现查找列表指定数字首次出现索引 不存在返回None
解决思路
你原有代码的问题根源是:当目标数字不存在于列表时,递归到空列表会返回None,上层递归直接执行1 + None会触发类型错误。不需要借助not in做预判断,只需要在递归返回时加一层判断即可:如果下层递归返回的是None,说明子列表中没有找到目标,当前层直接返回None即可,不需要执行加1操作。
修正后代码
def index(lst, number_find): if not lst: # 空列表判定,直接返回None return None if lst[0] == number_find: return 0 # 接收下层递归的返回结果 sub_result = index(lst[1:], number_find) # 子列表未找到就直接返回None,找到才做加1计算 return sub_result + 1 if sub_result is not None else None # 测试用例 liste = list(range(51)) print(index(liste, 42)) # 存在元素,输出42 print(index(liste, 100)) # 不存在元素,输出None
逻辑说明
- 每次递归先判断当前列表是否为空,为空直接返回
None - 如果当前列表第一个元素匹配目标,直接返回索引0
- 递归查找切片后的子列表,若子列表返回结果为
None,说明目标不存在,当前层也直接返回None;若子列表返回有效索引,加1即为当前层对应的索引值 - 全程仅使用递归逻辑,没有用到任何隐式迭代的语法
内容的提问来源于stack exchange,提问作者Lechat Marcellin
相关产品推荐
相关产品推荐

