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
相关产品推荐
相关产品推荐

