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

Python index()方法返回位置不符合预期问题排查与解决

问题原因

str.index(sub)方法的核心逻辑是返回参数sub在字符串中第一次匹配位置的索引,不会返回当前遍历到的重复字符的实际位置。如果字符串不存在任何重复字符,原写法看似能得到正确结果,但只要存在重复字符就会出现索引匹配错误,属于不稳定的错误写法。
以测试字符串javadzamani为例,字符串中a字符重复出现多次,各位置对应关系如下:

  • 索引0: j
  • 索引1: a
  • 索引2: v
  • 索引3: a
  • 索引4: d
  • 索引5: z
  • 索引6: a
  • 索引7: m
  • 索引8: a
  • 索引9: n
  • 索引10: i
    遍历到索引3、6、8位置的a时,调用text.index('a')永远只会返回第一个a的索引1,和当前字符的真实索引完全不符,最终导致偶数索引判断逻辑失效。
    另外原代码第一行末尾多写了一个多余的反引号,运行时会直接触发语法错误,需要删除。
修正方案

推荐两种符合Python编码习惯的写法:

方案1:使用enumerate()同时获取索引和字符(可读性最高)

enumerate()可以在遍历序列时同时返回当前元素的索引和值,完全规避index()的匹配问题:

text = input('Enter a text : ')
# 测试可输入javadzamani查看结果
for idx, char in enumerate(text):
    # idx就是当前字符的真实索引
    if idx % 2 == 0:
        print(char)

输入javadzamani时,输出结果为j、v、d、a、a、i,符合偶数索引筛选预期。

方案2:使用字符串切片(写法最简洁)

Python序列支持步长切片,text[::2]表示从索引0开始,每隔1个字符取一个值,正好对应所有偶数索引位置的字符,不需要手动写索引判断:

text = input('Enter a text : ')
for char in text[::2]:
    print(char)

运行结果和方案1完全一致。

内容的提问来源于stack exchange,提问作者javad zamani

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 03:42:19