如何用Python递归统计列表元素出现次数?解决变量未定义报错
递归统计列表中目标元素的次数及报错解决
报错原因分析
你遇到的local variable n referenced before assignment错误,本质是else分支里的n未定义就直接执行n+=1——基准条件里的n是该分支下的局部变量,和else分支的n完全无关,Python找不到else分支中n的定义,所以报错。
递归统计的正确思路
递归的核心是拆解问题:当前列表的目标元素数量 = 子列表(去掉第一个元素)的统计结果 + (当前第一个元素是目标则加1,否则加0)。不需要单独维护计数器,直接通过递归调用的返回值完成累加即可。
修正后的代码
基础版本
def rc_count(L, x): # 基准条件:空列表没有元素,返回0 if len(L) == 0: return 0 else: # 先获取子列表的统计结果 sub_total = rc_count(L[1:], x) # 加上当前元素的匹配情况(匹配加1,否则加0) return sub_total + (1 if L[0] == x else 0)
简洁版本
可以把逻辑合并成一行,更紧凑:
def rc_count(L, x): return 0 if not L else rc_count(L[1:], x) + (1 if L[0] == x else 0)
测试验证
调用rc_count([1,2,2,3,2], 2)会返回3,符合预期。
内容的提问来源于stack exchange,提问作者shinny.dogma
相关产品推荐
相关产品推荐

