python find方法不适用于" /"这里

时间:2014-03-13 20:15:53

标签: python python-2.7

考虑以下代码

#!/usr/bin/python
url = "http://stackoverflow.com/questions/22389923/python-find-method-doesnt-work-for-here"
print url.find("/",8)

你得到的输出是24,但答案必须是3.不是吗?

4 个答案:

答案 0 :(得分:2)

这会找到子串/的第一个 索引 从索引8开始搜索

您可能认为它是在计算出现次数而不是找到位置,但如果您阅读文档字符串,则不会误解这一点:

Docstring:
S.find(sub [,start [,end]]) -> int

Return the lowest index in S where substring sub is found,
such that sub is contained within S[start:end].  Optional
arguments start and end are interpreted as in slice notation.

Return -1 on failure.

现在,要获得" 3"我想你可能在寻找:

>>> url[8:].count('/')
3

答案 1 :(得分:1)

输出正确,为什么你期待3?看:

http://stackoverflow.com/questions/22389923/python-find-method-doesnt-work-for-here
^  ^    ^               ^
0  3    8              24

根据documentationurl.find("/", 8)正在寻找第8个索引之后第一次出现"/" 的索引,而这恰好是第24个指数。引用文档(强调我的):

string.find(s, sub[, start[, end]])
  

返回 s 中的最低索引,其中找到子字符串 sub ,以便 sub 完全包含在 sub s[start:end]。失败时返回-1开始结束的默认值,负值的解释与切片相同。

也许您打算使用count

url.count('/', 8)
=> 3

答案 2 :(得分:1)

你误解了str.find的使用。它找到某个子字符串的index(即它的位置),而不是它似乎想要的次数。你想使用(惊讶,惊讶)str.count

例如:

>>> url = "http://stackoverflow.com/questions/22389923/python-find-method-doesnt-work-for-here"
>>> url.count('/', 8)
3

这似乎是你想要的输出。

答案 3 :(得分:0)

Python中的find方法返回字符串中特定字符的索引。其中一个可选参数是您要启动的字符串中的位置。在你的命令中,你说:

print url.find("/", 8)

你告诉它打印第一次出现斜杠的索引,从第8个字符开始。在此字符串中,该字符串出现在字符24上。

来自文档:

string.find(s, sub[, start[, end]])

Return the lowest index in s where the substring sub is found such that sub 
is wholly contained in s[start:end]. Return -1 on failure. Defaults for start 
and end and interpretation of negative values is the same as for slices.

此处的文档更多内容:http://docs.python.org/2/library/string.html#string.find

相反,您似乎试图找到起点后出现的字符数。为此,您可以使用.count方法。这是一些示例代码

#!/usr/bin/python
url = "http://stackoverflow.com/questions/22389923/python-find-method-doesnt-work-for-here"
print url.count( '/', 8)
# should print 3

此处的文档更多内容:http://docs.python.org/2/library/string.html#string.count