如何实现按指定索引分割字符串的Python函数?
Python字符串按索引分割函数实现方案
核心逻辑
要实现按给定索引分割字符串,本质就是按顺序截取字符串的不同区间:从起始位置到第一个索引,再从第一个索引到第二个索引,以此类推,最后补上从最后一个索引到字符串末尾的部分。
具体实现代码
from typing import List def split_by_index(s: str, indexes: List[int]) -> List[str]: # 预处理索引:去重、排序,只保留0到字符串长度之间的有效索引 valid_indexes = sorted({idx for idx in indexes if 0 < idx < len(s)}) result = [] start_pos = 0 # 遍历每个有效索引,截取对应区间的子串 for idx in valid_indexes: result.append(s[start_pos:idx]) start_pos = idx # 添加最后一段剩余的字符串 if start_pos < len(s): result.append(s[start_pos:]) return result
代码说明
- 索引预处理:用集合去重,避免重复分割;排序保证索引按递增顺序处理,防止分割顺序混乱;过滤掉超出字符串范围或无效的索引(比如0或等于字符串长度的索引),避免出现空串或错误截取。
- 循环分割:从起始位置
start_pos开始,依次截取到每个有效索引的子串,加入结果列表后更新起始位置。 - 收尾处理:遍历完所有索引后,把最后一段从
start_pos到字符串结尾的子串加入结果,确保没有遗漏。
测试验证
用题目给出的示例测试:
print(split_by_index("pythoniscool,isn'tit?", [6, 8, 12, 13, 18])) # 输出:["python", "is", "cool", ",", "isn't", "it?"]
完全符合预期结果。
边界情况处理
- 如果传入的索引列表为空,函数会直接返回包含原字符串的列表:
[s] - 如果索引有重复或乱序,预处理步骤会自动去重并排序,保证分割逻辑正常
- 如果索引超出字符串长度,会被过滤,不影响最终结果
内容的提问来源于stack exchange,提问作者dmtree
相关产品推荐
相关产品推荐

