当前位置: 首页 > 知识库问答 >
问题:

使用python中的in运算符搜索列表时使用的是什么算法?

叶光华
2023-03-14
if item in list:
  print item

共有1个答案

洪景铄
2023-03-14

列表不能假定是按排序的顺序(或任何顺序)进行的,因此二进制搜索将不起作用。也不能假定键是可哈希的,因此与dictset不同,哈希表查找不能用于加速搜索

在猜测中,它是从第一个到最后的每个元素的直通检查。

我将尝试挖掘相关的Python源代码。

   393 static int
   394 list_contains(PyListObject *a, PyObject *el)
   395 {
   396     Py_ssize_t i;
   397     int cmp;
   398 
   399     for (i = 0, cmp = 0 ; cmp == 0 && i < Py_SIZE(a); ++i)
   400         cmp = PyObject_RichCompareBool(el, PyList_GET_ITEM(a, i),
   401                                            Py_EQ);
   402     return cmp;
   403 }

剪辑2:情节变得更浓了。如果Python检测到您正在测试常量列表中元素的成员身份,例如:

if letter in ['a','e','i','o','u']:    # list version
if letter in {'a','e','i','o','u'}:    # set version

编辑3[@johnmachin]:

常量列表在2.5-2.7和3.1-3.3中被优化为常量元组。
常量集在3.3中被优化为(常量)frozenset。

 类似资料:
  • 我基本上想搜索一个有2个过滤器/标签的查询 (例如2个国家/地区的1个城市--美国或加拿大) ElasticSearchApi.java search.java的一部分 例如,代码呈现ff查询,该查询显示国家/地区内名称为NEW的可用城市: 这将导致显示在美国或加拿大的所有城市以新的名称。 但似乎不起作用,所以我要求正确的改造或操作员,或一些可以帮助我实现我的目标。

  • 问题内容: 运算符是做什么用的?我看过类似的东西 但是,这对我来说都没有意义。我已经完成了研究,但只提出了没有任何解释的示例。 问题答案: 是用于测试对象(实例)是否为给定Type的子类型的二进制运算符。 想像: 然而,随着;, 因为是的超类型,可能较少。 和, 这是因为Dog既不是的子类型也不是的父类型Cat,并且它也不实现它。 请注意,上面用于的变量是类型。这是一个运行时操作,将我们带到一个用

  • 问题内容: …按预期工作,但是如果我需要像这样检查多个字符串怎么办: …似乎不起作用。 问题答案:

  • 问题内容: 我最近遇到了以下代码: 这是什么,某种反向双λ? 问题答案: 没有操作员。第一个只是Java 8中引入的lambda语法,第二个是误导性的“小于” 和“一元减”的串联。 您可以将其读取为,即它会测试是否小于,所有(很好,大多数)负数就是这种情况,因此命名为。 仅出于完整性考虑:此测试不仅(有意地?)难以理解,而且-如评论中所指出- 也因(而)失败。相反,您可能应该只使用简单得多的。

  • 问题内容: 我试图通过ajax发送Get请求,并输出html服务器返回的json数据。 但是,我得到了这个错误。 这是我的代码,它通过ajax将Get请求发送到php文件。当我使用$ .each方法时,它会收到上面显示的错误。 这是我的PHP代码,以json格式返回查询结果。 这个PHP输出的JSON数据是这样的。 有人知道如何解决此问题吗? 请帮帮我。提前致谢 :) 问题答案: 您有一个JSON

  • 问题内容: 我从jls找到了报价: 相等运算符可用于比较两个可转换(第5.1.8节)为数字类型的操作数,或两个boolean或Boolean类型的操作数,或 两个分别为引用类型或null类型的操作数 。所有其他情况都会导致编译时错误。 但是这段代码 每个操作数都是参考! 说这是不兼容的类型。 jls在哪里说这些类型应该兼容? 问题答案: 在15.21.3节(参考相等运算符==和!=)中: 如果无法