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

Python拆分CamelCase字符串时首个分隔位出现双空格问题求助

问题根源分析

你代码里构建new_list的循环分支没有做互斥判断,导致i=0时会重复插入元素:
以输入breakCamelCase为例,存储大写字母索引的Camel列表为[5, 10],循环变量i的取值范围是0、1、2:

  • 当i=0时,首先触发i==0的分支,插入s[0:5]即"break"
  • 紧接着没有跳过后续判断,又触发了else分支,此时i-1=-1,Camel[-1]取到列表最后一个元素10,s[10:5]是空字符串,会被额外插入到列表中

最终new_list的内容是["break", "", "Camel", "Case"],用空格拼接后,空字符串和前后元素就会产生多余的空格,这就是首个分隔点出现双空格的原因。

修复方案

只要把三个分支改成互斥判断即可,修改后的循环代码如下:

for i in range(len(Camel)+1):
    last_one = len(Camel) - 1
    if i == 0:
        new_list.append(s[0:Camel[0]])
    elif i == len(Camel):
        new_list.append(s[Camel[last_one]:])
    else:
        new_list.append(s[Camel[i-1]:Camel[i]])

补充说明:new_list += [xxx]的写法等价于new_list.append(xxx),用append写法可读性更好。

更简洁的实现方案

如果不需要自己实现底层拆分逻辑,用正则表达式可以一行实现需求:

import re
def solution(s):
    return re.sub(r'([A-Z])', r' \1', s)

原理是匹配所有大写字母,直接在其前面补一个空格即可。

也可以用遍历字符的极简写法,逻辑更清晰易维护:

def solution(s):
    res = []
    for c in s:
        if c.isupper():
            res.append(' ')
        res.append(c)
    return ''.join(res)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 07:54:07