| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 3378 人关注过本帖
标题:关于s·find('')结果始终为0
只看楼主 加入收藏
莫珞lili
Rank: 1
来 自:浙江
等 级:新手上路
帖 子:23
专家分:7
注 册:2010-4-19
结帖率:33.33%
收藏
 问题点数:0 回复次数:2 
关于s·find('')结果始终为0
s.find('')其中s为任意字符串,得到的结果始终为0是为什么,跟字符串无关?其实空字符串一直有?只是我们看不到?求指教
搜索更多相关主题的帖子: 字符串 
2017-02-14 17:32
莫珞lili
Rank: 1
来 自:浙江
等 级:新手上路
帖 子:23
专家分:7
注 册:2010-4-19
收藏
得分:0 
自己顶
2017-02-15 11:15
sunb3
Rank: 2
来 自:北京
等 级:论坛游民
威 望:3
帖 子:34
专家分:94
注 册:2017-4-20
收藏
得分:0 
其实这个原理你理解了根本没有任何意义,不过正好今天有点闲,可以帮你掰开讲一下:

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

先看一下''的实际大小:
>>> 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编辑过]


除了基础……我什么都不会……
2017-05-02 11:24
快速回复:关于s·find('')结果始终为0
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.019724 second(s), 11 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved