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

Python find()函数返回意外结果的原因解析

Python str.find() 查找DLR/DLR1/DLR2返回重复索引的原因

问题重现

给定字符串:

string = "DLR1=A,B,C,D,E,F,G|DLR2=A,B,C,D,E,F,G|DLR=A,B,C,D,E,F,G|"

调用find()查找目标子串时,结果不符合预期:

print(string.find('DLR'))   # 输出:0
print(string.find('DLR1'))  # 输出:0
print(string.find('DLR2'))  # 输出:19

但如果查找带等号的完整键名,就能得到预期的三个不同索引:

print(string.find('DLR='))  # 输出:38
print(string.find('DLR1=')) # 输出:0
print(string.find('DLR2=')) # 输出:19

原因解析 & 是否为预期行为

这绝对是str.find()的预期行为,核心逻辑很简单:
find()方法会返回子串在字符串中第一次出现的起始索引:

  • 找DLR时,字符串最开头(索引0)的前3个字符就是DLR(对应string[0:3]),所以直接返回0;
  • 找DLR1时,字符串最开头的前4个字符是DLR1(对应string[0:4]),它的起始位置也是0,因此同样返回0;
  • 找DLR2时,开头没有匹配的子串,直到索引19的位置才找到第一个DLR2,所以返回19。

而带等号的子串之所以能得到正确结果,是因为:

  • DLR=不会在开头匹配(开头是DLR1=),只有到索引38的位置才出现独立的DLR=;
  • DLR1=和DLR2=各自的起始位置唯一,不会和其他子串重叠匹配,因此返回正确的索引。

内容的提问来源于stack exchange,提问作者Francesco Gregotti

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 15:32:21