Python-为什么find和index方法的工作方式不同?

2024-09-29 02:24:08 发布

您现在位置:Python中文网/ 问答频道 /正文

在Python中,findindex是非常相似的方法,用于查找序列类型中的值。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


Tags: 方法字符串角色类型列表参数index原因
1条回答
网友
1楼 · 发布于 2024-09-29 02:24:08

这一直很烦人;-)与一个答案相反,关于字符串-1没有什么特别的;例如

>>> "abc"[-1]
'c'
>>> [2, 3, 42][-1]
42

实践中find()的问题是-1实际上并不是一个特殊的索引。因此,使用find()的代码在没有找到要搜索的内容时很容易让人感到意外——甚至在Python 1.0.0发布之前就已经注意到,这样的代码经常会出错。

当使用index()时,不会发生这样的意外-异常不能被忽略。但是,为这样一个简单的操作设置try/except不仅烦人,还为“应该是”的快速操作增加了大量开销(额外时间)。因此,Python 0.9.9中添加了string.find()(在此之前,只能使用string.index())。

所以我们两个都有,甚至在Python3中都有。选择你的毒药:-)

相关问题 更多 >