在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
块或一个条件语句会起作用。我只是在问,在这种特殊情况下,让行为与众不同的理由是什么。对我来说,为了保持一致性,有一种特定的行为说“找不到”会更有意义。
另外,我并不是在问原因是不是一个好的原因——我只是好奇的原因是什么。
编辑:有些人指出,字符串也有一个index
方法,它的工作方式类似于列表的index
方法,我承认我不知道,但这让我想知道,如果字符串都有,为什么列表只有index
。
这一直很烦人;-)与一个答案相反,关于字符串-1没有什么特别的;例如
实践中
find()
的问题是-1实际上并不是一个特殊的索引。因此,使用find()
的代码在没有找到要搜索的内容时很容易让人感到意外——甚至在Python 1.0.0发布之前就已经注意到,这样的代码经常会出错。当使用
index()
时,不会发生这样的意外-异常不能被忽略。但是,为这样一个简单的操作设置try/except
不仅烦人,还为“应该是”的快速操作增加了大量开销(额外时间)。因此,Python 0.9.9中添加了string.find()
(在此之前,只能使用string.index()
)。所以我们两个都有,甚至在Python3中都有。选择你的毒药:-)
相关问题 更多 >
编程相关推荐