Python: 为什么列表没有find方法?

29 浏览
0 Comments

Python: 为什么列表没有find方法?

我想写一个回答这个问题的答案,并且很惊讶地发现列表没有find方法,只有index方法(字符串有find和index方法)。\n有人可以告诉我这背后的原理吗?\n为什么字符串两个方法都有?

0
0 Comments

Python中的列表(lists)没有find方法的原因是因为它们有一个名为index的方法。我认为string.findlist.index之间的不一致性是不幸的,无论是在名称还是行为上:string.find在找不到匹配项时返回-1,而list.index会引发ValueError错误。这个设计可以更加一致。这两个操作之间唯一无法调和的区别是string.find搜索一串项目,而list.index只搜索一个项目(这本身不能证明使用不同的名称是合理的)。

下次在REPL中尝试"asdfasdf".index('z'),这将突出显示这种常被重复说的"一种明显的方法"的荒谬之处,因为它们甚至不能在核心字符串方法中保持一致。

但是我这个示例的重点在于,它们确实保持了一致。列表和字符串都有一个行为完全相同的index方法。只是字符串额外添加了一个find方法。我不确定为什么它们不也为列表添加这个方法,但是list.indexstring.find之间没有等价关系。

不一致只是在一点点转移,其根本原因是冗余的搜索函数。(getattr可以正确处理这个问题,根据需要可以返回一个标志值或异常。)

虽然字符串和列表都有一个.index()方法,但它们的功能并不完全相同。对于字符串,它会找到子字符串,而对于列表,它会找到子列表,这对我来说是另一个不一致的例子。

这是个很好的观点。我想我错了,这并不是我第一次犯错。

你是如何在我点击“添加评论”按钮之前就看到并回复我的评论的呢?这真的让我困惑,现在我无法更正其中的拼写错误了。

0
0 Comments

Python中的列表(Lists)没有提供find方法的原因是,该方法与index方法的区别不够明显。当待查找的元素存在于列表中时,find和index方法都会返回相同的结果;它们的区别在于当待查找的元素不在列表中时的处理方式。然而,可以通过简单地从一个方法构建另一个方法来解决这个问题。在其他编程语言中,通过引发和捕获异常来处理非错误条件可能会被认为是不好的做法,因为你可以很容易地进行测试来避免异常的发生。但在Python中,使用异常处理而不是像这样的测试通常被认为更符合Pythonic(Python风格)的做法。所以,我们可以通过使用try/except来构建find方法,如下所示:

try:
    foo_index = my_list.index(foo)
catch ValueError:
    foo_index = -1 # 或者进行其他处理

至于为什么列表(list)只提供了index方法,而字符串(string)则提供了独立的index和find方法,我无法给出确切的答案。

0
0 Comments

Python中的列表没有find方法的原因可能是因为有其他可以替代的方法,比如使用index方法和in运算符来实现查找功能。index方法和in运算符可以用于查找列表中的单个项,但是如果想判断一个列表是否是另一个列表的子列表并且项的顺序相同,就需要使用其他方法。基本的原则是通过迭代遍历列表来查找,无论列表是否嵌套,都可以使用这些操作符进行查找。同时,用户也可以开发自己的方法、类或生成器来实现这个功能。在数组中,标准的find方法是用来搜索单个项的。但是在Python中,由于对列表的处理非常详细,以及对字符串与列表的相似处理方式,所以有些人可能会觉得这一点令人惊讶。

0