python2.7.5中的find()函数

时间:2013-11-23 05:53:33

标签: python python-2.7

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

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

以下是它的工作原理:

0 a 1 s 2 d 3 f 4

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

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

[find]的最后一个位置是 之后的

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

所以当你执行'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是如何运作的,所以你不清楚你希望从这个问题中获得什么。