考虑以下代码
#!/usr/bin/python
url = "http://stackoverflow.com/questions/22389923/python-find-method-doesnt-work-for-here"
print url.find("/",8)
你得到的输出是24,但答案必须是3.不是吗?
答案 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
根据documentation,url.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