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

Python递归字符串分割代码原理解析求助(含自定义实现)

递归字符串拆分代码解析

先明确这段代码的核心功能:把输入字符串分成两组结果返回:

  • 第一组:包含小写字母、下划线_、句号.
  • 第二组:包含大写字母、空格、竖线|
  • 不属于以上两类的字符直接忽略

递归的核心逻辑拆解

递归的本质是把大问题拆成重复的小问题,直到遇到终止条件再往回合并结果,我们一步步拆解这段代码:

1. 终止条件

if not char_string:
    return ("", "")

当输入的字符串为空时,返回两个空字符串——这是递归的终点,没有它程序会无限调用自己直到崩溃。

2. 你最困惑的第5行:递归调用

first_msg, second_msg = split_rec(char_string[1:])

这行是整个递归的核心:

  • char_string[1:]是把当前字符串去掉第一个字符后的子串
  • 调用split_rec处理这个子串,得到的first_msg和second_msg是后面所有字符处理好的两组结果
  • 这里要注意:递归是先钻到最深处(处理完最后一个字符),再回头处理当前的第一个字符,也就是「从后往前处理」的逻辑。

3. 处理当前字符并合并结果

拿到后面字符的处理结果后,判断当前第一个字符属于哪一组,再把它加到对应组的前面(因为是回溯,后面的字符已经排好顺序了,当前字符要放在最前面才能保持原字符串的顺序):

if char.islower() or char in "_.":
    return char + first_msg, second_msg  # 当前字符加到第一组的前面
if char.isupper() or char in " |":
    return first_msg, char + second_msg  # 当前字符加到第二组的前面
return first_msg, second_msg  # 不属于两类的字符直接忽略

举个例子看完整流程

假设输入字符串是"Ab_c|D ",我们跟着递归走一遍:

  1. 调用split_rec("Ab_c|D ") → 取第一个字符'A',先调用split_rec("b_c|D ")
  2. 调用split_rec("b_c|D ") → 取'b',调用split_rec("_c|D ")
  3. 调用split_rec("_c|D ") → 取'_',调用split_rec("c|D ")
  4. 调用split_rec("c|D ") → 取'c',调用split_rec("|D ")
  5. 调用split_rec("|D ") → 取'|',调用split_rec("D ")
  6. 调用split_rec("D ") → 取'D',调用split_rec(" ")
  7. 调用split_rec(" ") → 取' ',调用split_rec("")
  8. 触发终止条件,split_rec("")返回("", "")

现在开始回溯合并结果:

  • split_rec(" "):' '属于第二组,返回("", " " + "") → ("", " ")
  • split_rec("D "):'D'属于第二组,返回("", "D" + " ") → ("", "D ")
  • split_rec("|D "):'|'属于第二组,返回("", "|" + "D ") → ("", "|D ")
  • split_rec("c|D "):'c'属于第一组,返回("c" + "", "|D ") → ("c", "|D ")
  • split_rec("_c|D "):'_'属于第一组,返回("_" + "c", "|D ") → ("_c", "|D ")
  • split_rec("b_c|D "):'b'属于第一组,返回("b" + "_c", "|D ") → ("b_c", "|D ")
  • split_rec("Ab_c|D "):'A'属于第二组,返回("b_c", "A" + "|D ") → ("b_c", "A|D ")

最终结果就是("b_c", "A|D "),和原字符串的顺序完全对应。

为什么是char + first_msg而不是反过来?

因为递归是从后往前处理的,最后一个字符会先被加到结果里。如果写成first_msg + char,结果会反过来——比如输入"bc",会得到"cb",而现在的写法能保证顺序和原字符串一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 04:35:35