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

按指定索引列表分割字符串的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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 19:40:33