按指定索引列表分割字符串的Python函数错误排查
代码错误分析与修复
你的代码存在两个核心问题:
1. 遗漏了字符串开头到第一个索引的分段
原代码直接用传入的indexes作为分段起始位置,完全没考虑从字符串开头(索引0)到第一个有效索引的部分。比如第一个测试用例里,第一个索引是6,你直接从6开始切,自然漏掉了"python"(s[0:6])。
2. 未处理无效索引,且无效索引会生成空分段
当传入的索引超过字符串长度时(比如第二个测试用例的42),原代码会尝试切s[42:None],这在Python里会得到空字符串,而不是保留原字符串。另外,你也没做无效索引的过滤逻辑。
修复后的代码
from typing import List def split_by_index(s: str, indexes: List[int]) -> List[str]: # 过滤无效索引:只保留0 <= idx <= len(s)的索引,去重并排序 valid_indexes = sorted(set(idx for idx in indexes if 0 <= idx <= len(s))) # 开头加上0,确保包含字符串起始部分;结尾加上None,确保取到最后一段 full_indexes = [0] + valid_indexes + [None] # 按相邻索引对切分字符串 parts = [s[i:j] for i, j in zip(full_indexes, full_indexes[1:])] # 过滤可能出现的空字符串(比如索引重复时) return [part for part in parts if part]
测试验证
用你的测试用例运行:
print(split_by_index("pythoniscool,isn'tit?", [6, 8, 12, 13, 18])) # 输出:["python", "is", "cool", ",", "isn't", "it?"] print(split_by_index("no luck", [42])) # 输出:["no luck"]
完全符合预期。
内容的提问来源于stack exchange,提问作者Yu So
相关产品推荐
相关产品推荐

