注册 登录
编程论坛 Python论坛

关于s·find('')结果始终为0

莫珞lili 发布于 2017-02-14 17:32, 3486 次点击
s.find('')其中s为任意字符串,得到的结果始终为0是为什么,跟字符串无关?其实空字符串一直有?只是我们看不到?求指教
2 回复
#2
莫珞lili2017-02-15 11:15
自己顶
#3
sunb32017-05-02 11:24
其实这个原理你理解了根本没有任何意义,不过正好今天有点闲,可以帮你掰开讲一下:

你这个问题的原因是''在字串中没有任何实际的意义。

先看一下''的实际大小:

>>> len('')
0


然后看看这两句:
程序代码:

>>> 'foo'[0:0]
''
>>> 'foo'[1:0]
''
#...


所以任何字串都可以表示为""+"字串内容"的形式,所以不管你用以下哪种方法,都会返回一个肯定值:

>>> s = "abcde"
>>> s.find('')
0


程序代码:

>>> s = "abcde"
>>> '' in s
True


当执行s.find('')时,python解释器会认为"abcde"等同于"" + "abcde"。同理,如果你输入:
>>> s = "abcde"
>>> s.find('',5)

解释器就会给你返回5,因为"abcde" 等同于 "abcde" + "",还记得len('')的结果是0么?所以len(s)是5也可以认为len(s)+len('')=5+0=5,道理就是这样。



不过这并不表示所有find结果都会返回目标数,找寻第几处需要看你的实际字串长度——len(s),比如下面这个例子就返回了-1:
程序代码:

>>> s = "abcdef"
>>> len(s)
6
>>> s.find('',7)
-1

这是因为s只保存了6个元素,多了没有,所以python解释器不会将它转译成"abcdef"+""+""+""+""+...+""的形式(估计也是为了防止恶意增加主机负担吧)

具体可以参考这篇文档:
https://docs.

有一段是这么说的:

...
For the string and bytes types, x in y is True if and only if x is a substring of y. An equivalent test is y.find(x) != -1. Empty strings are always considered to be a substring of any other string, so "" in "abc" will return True.
...

string和bytes类型中,只有当x是y的一个子字时才会返回True。它的结果等同于y.find(x)!=-1。空字串会永远被认做是任何其它字串的子字(比如'' in ''),所以'' in "abc"会返回True



=======================================
其实这种追溯原理的心态是不太正确的,首先你没有能看清实际底层的思维和能力,第二你了解的原理对你实际帮助并不大,更谈不上提高能力了。与其纠结为什么会这样,不如纠结我想实现什么效果该怎么办……

[此贴子已经被作者于2017-5-4 08:49编辑过]

1