Python 如何实现按序查找指定字符序列首个匹配的各字符索引
原有代码的问题排查
- 触发类型错误的核心原因:Python字符串的
find()方法要求搜索起始位置必须是整数,原代码chars.find(chars, wholestring)把整个待搜索的长字符串wholestring作为第二个位置参数传给find方法,参数类型不匹配,直接报“切片索引必须为整数”的错误 - 逻辑偏差点:原代码在
chars字符串本身上调用find方法反复匹配整个chars序列,既没有逐字符遍历chars的每个元素,也没有按照规则以上一个字符的匹配位置为起点向后搜索,循环里反复返回索引0,根本触发不了退出条件
正确实现的核心逻辑
按照题目要求的顺序匹配规则,逐字符完成搜索:
- 初始化空列表存匹配到的字符位置,设置初始搜索起点为0(从wholestring的开头开始第一次查找)
- 遍历chars中的每一个待匹配字符:
- 从当前的搜索起点开始,在wholestring中查找该字符第一次出现的位置
- 如果查找返回-1(即后续范围没有匹配到该字符),直接中断搜索,返回已收集的位置列表
- 将找到的位置加入结果列表
- 将下一次的搜索起点调整为当前匹配位置的后一位,确保下一个字符的搜索不会重复使用当前已占用的索引
可运行的修正代码
def find_firstchars(chars, wholestring): matched_positions = [] current_search_start = 0 for target_char in chars: pos = wholestring.find(target_char, current_search_start) if pos == -1: break matched_positions.append(pos) current_search_start = pos + 1 return matched_positions # 测试验证 print(find_firstchars("ABC", "VMQOAJVBKRJCPGI")) print(find_firstchars("GTA", "ACGACATCACGTGACG"))
匹配结果验证
- 调用
find_firstchars("ABC", "VMQOAJVBKRJCPGI")时,依次定位A在索引4、B在索引7、C在索引11,返回[4, 7, 11],符合示例预期 - 调用
find_firstchars("GTA", "ACGACATCACGTGACG")时,依次定位G在索引2、T在索引6、A在索引8,返回[2, 6, 8],符合预期
内容的提问来源于stack exchange,提问作者Ian
相关产品推荐
相关产品推荐

