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

Python中调用s.find('')返回0的原因咨询

Python字符串find()方法的空字符串匹配疑问

我最近在做在线课程《Building A Search Engine》的测验时,遇到了一个关于Python字符串find()方法的问题,一开始对其中一个选项特别困惑,现在搞清楚了,来梳理一下:

测验题目

对于任意字符串 s = '<any string>',以下哪项结果恒为0?
(a) s.find(s)
(b) s.find('s')
(c) 's'.find('s')
(d) s.find('')
(e) s.find(s+'!!!')+1

正确答案

正确选项是 (a)、(c)、(d)和(e)

我的疑问与解惑

其他选项我一开始都能确定,但对(d)选项s.find('')完全摸不着头脑——我原以为空字符串''根本不算任何字符串的子串,应该返回-1,但实际运行不管是什么字符串,这个表达式都返回0。

后来我查了Python的官方说明才明白:空字符串始终被视为任何其他字符串的子串,而且find()方法默认会匹配字符串的起始位置(索引0)。举几个实际测试的例子:

  • "hello".find('') 返回 0
  • "" in "test" 返回 True
  • 甚至空字符串自身调用"".find('')也会返回0,因为空字符串本身就包含空字符串

补充其他选项的验证

为了更清晰,再简单说下其他正确选项的逻辑:

  • (a) s.find(s):任何字符串本身都是自己的子串,起始索引必然是0,所以结果恒为0
  • (c) 's'.find('s'):和(a)同理,单个字符的字符串查找自身,返回起始索引0
  • (e) s.find(s+'!!!'):s+'!!!'是在原字符串后追加了新内容,肯定不是s的子串,所以find()返回-1,加1之后结果就是0,恒成立

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 08:45:51