【发布时间】:2013-12-23 00:09:31
【问题描述】:
在 Python 中,find 和 index 是非常相似的方法,用于查找序列类型中的值。 find 用于字符串,index 用于列表和元组。它们都返回找到提供的参数的最低索引(最左边的索引)。
例如,以下两个都将返回1:
"abc".find("b")
[1,2,3].index(2)
然而,我有点困惑的一件事是,尽管这两种方法非常相似,并且扮演几乎相同的角色,只是对于不同的数据类型,它们对试图找到不在其中的东西有非常不同的反应顺序。
"abc".find("d")
返回-1,表示“未找到”,而
[1,2,3].index(4)
引发异常。
基本上,为什么他们有不同的行为?是有什么特殊原因,还是只是没有特殊原因的奇怪的不一致?
现在,我不是在问如何处理这个问题——显然,try/except 块或条件in 语句都可以。我只是在询问在特定情况下使行为不同的基本原理是什么。对我来说,为了一致性起见,将特定行为说为未找到更有意义。
另外,我并不是要就原因是否是一个好理由征求意见——我只是好奇是什么原因。
编辑: 有人指出字符串也有一个index 方法,它的工作方式类似于列表的index 方法,我承认我不知道,但是只是让我想知道为什么,如果字符串两者都有,列表只有index。
【问题讨论】:
-
请注意
str.index存在,其功能与list.index类似。 -
str.index的文档描述是“与 find() 类似,但在未找到子字符串时引发 ValueError。”所以答案可能只是列表中没有find的等价物。 -
这两种方法的一个区别是可以找到子字符串:
'abc'.find('bc') -
哦,我没有意识到字符串也有索引方法,这很有趣。
-
@DonaldMiner 字符串的索引也很乐意处理它,cf
'abc'.index('bc')
标签: python methods indexing find consistency