自定义split函数异常:循环分割字符串遗漏最后单词及空格处理问题
自定义空格分割函数的问题修复
原代码存在三个核心问题:
- 循环结束后未处理最后一个非空单词,导致遗漏;
- 遇到空格就直接将当前(可能为空的)
word加入结果,出现空字符串元素; - 最后判断结果列表长度的逻辑不合理,无法正确返回末尾有单词的情况。
修正后的代码
def mysplit(strng): res = [] word = "" for char in strng: if char != " ": word += char else: # 只有当word非空时才添加到结果,避免空字符串 if word: res.append(word) word = "" # 循环结束后,把最后一个未处理的非空单词加入结果 if word: res.append(word) return res # 测试用例 print(mysplit("To be or not to be, that is the question")) print(mysplit("To be or not to be,that is the question")) print(mysplit(" ")) print(mysplit(" abc ")) print(mysplit(""))
修正点说明
- 遍历方式优化:直接遍历字符串的字符,比用
range(len(strng))更简洁直观; - 空格处理逻辑改进:遇到空格时,仅当
word不为空才将其加入结果列表,避免连续空格或开头空格产生空字符串元素; - 补充末尾单词处理:循环结束后检查
word是否非空,确保最后一个单词不会被遗漏; - 简化返回逻辑:直接返回结果列表即可,因为如果输入是纯空格或空字符串,
res会自然是空列表,无需额外判断。
运行修正后的代码,输出将完全符合预期:
['To', 'be', 'or', 'not', 'to', 'be,', 'that', 'is', 'the', 'question'] ['To', 'be', 'or', 'not', 'to', 'be,that', 'is', 'the', 'question'] [] ['abc'] []
内容的提问来源于stack exchange,提问作者Thiago Silva
相关产品推荐
相关产品推荐

