find() function in python2.7.5



find('asdf','')'asdf'中找到一个空字符串,因此返回0。类似地,find('asdf','',3)开始搜索索引位置3处的字符串,并因此返回3。由于最后一个索引是3find('asdf','',4)应该返回-1,但它返回4,并且只有当起始索引大于或等于(last_index)+2时才开始返回-1。为什么会这样?

因为没有前四个字符的"asdf"仍然包含""。当索引超过字符串的长度,但索引等于字符串相当于"".find()时,就会进行更严格的检查。

以下是它的工作原理:

0 a 1 s 2 d 3 f 4

使用'asdf'.find(sub)时,它会搜索标记为0、1、2、3和4的五个位置。那五个。那五个。不多也不少。它返回第一个'asdf'[pos:pos+len(sub)] == sub。如果在find中包含start参数,则它从该位置开始。那个立场。一个也不能少,一个也不要多。如果给出的起始位置大于位置列表中的最大值,则返回-1。

换句话说,答案是我在评论中重复的,引用了另一个问题的答案:

最后一个位置[对于find]是字符串的最后一个字符之后的

编辑:你的根本误解似乎与字符串中"位置"的概念有关。find不会返回您希望作为单个单位访问的职位。即使它返回4,也不意味着空字符串"位于"位置4。find返回切片开始。您应该切片从给定位置开始的字符串。

所以当你做'asdf'.find('', 4)时,它从位置4开始。它在那里找到空字符串,因为'asdf'[4:4+len('')]==''。它返回4。这就是它的工作原理。

str.find并不打算在有效索引到实际字符串之间进行一对一映射。是的,你可以做很多其他的索引,比如'asdf'[100:300]。这与find无关。你从find知道的是'asdf'[pos:pos+len(sub)] == sub。您不知道find会返回所有可能返回''的索引,也不保证在搜索空字符串时find返回的数字是字符串的有效索引。

如果您对该功能的某些使用有实际问题,请将其作为单独的问题进行提问。但你似乎已经知道find是如何工作的,所以还不清楚你希望从这个问题中得到什么。

最新更新