You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将统计文本特定单词的Python函数改写为递归实现?

递归实现文档行计数的修正方案

原递归代码的问题

  • 未从传入的lst中获取当前要检查的行,导致line变量未定义
  • 每次调用函数都重置count = 0,直接丢失之前的计数
  • 递归逻辑冲突,同时手动维护count和返回1 + 递归结果,造成重复计数

修正后的递归实现

方式一:基于索引的高效递归

这种方式无需创建新列表,性能更优:

def count_words_r(self, word, index=0):
    # 递归终止条件:索引超出列表范围,返回0
    if index >= len(self.lst):
        return 0
    # 检查当前行是否包含目标单词
    current_line = self.lst[index]
    match = 1 if word.lower() in current_line.lower() else 0
    # 递归检查下一行,累加结果
    return match + self.count_words_r(word, index + 1)

调用示例:doc.count_words_r("your_target_word")

方式二:基于列表切片的直观递归

逻辑更易理解,但每次切片会生成新列表,大数据量下效率稍低:

def count_words_r(self, word, lst=None):
    # 首次调用时传入实例的文档列表
    if lst is None:
        lst = self.lst.copy()
    # 递归终止条件:列表为空,返回0
    if not lst:
        return 0
    # 检查列表第一个元素
    first_line = lst[0]
    match = 1 if word.lower() in first_line.lower() else 0
    # 递归检查剩余列表
    return match + self.count_words_r(word, lst[1:])

调用示例:doc.count_words_r("your_target_word")

额外优化:初始化方法的文件处理

原初始化代码可以用with语句自动管理文件资源,避免资源泄漏:

class Document:
    def __init__(self, filename):
        print("New Class")
        self.lst = []
        with open(filename, "r") as text:
            for line in text.readlines():
                stripped_line = line.strip()
                # 过滤空行和无效行
                if stripped_line not in ['', '/']:
                    self.lst.append(stripped_line)
        print(self.lst[0:10])

内容的提问来源于stack exchange,提问作者Berkay Poyraz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 13:48:08