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

使用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,并且它也不实现它。 请注意,上面用于的变量是类型。这是一个运行时操作,将我们带到一个用

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

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

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

  • 问题内容: 这个问题已经在这里有了答案 : 如何进行列表理解中的作业? (6个答案) 4年前关闭。 我不确定在循环中使用运算符时为什么不能在列表理解中使用运算符? 问题答案: 赋值运算符(及其上的所有变体)在Python中构成一个 语句 ,而不是一个 expression 。不幸的是,列表推导(以及其他推导,如集合,字典和生成器)仅支持表达式。