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

2024-01-15

当使用“in”运算符搜索列表中的项目时,例如

if item in list:
  print item

使用什么算法来搜索该项目。是从头到尾直接搜索列表还是使用二分搜索之类的东西?


list不能假定 s 是按排序顺序(或任何顺序)的,因此二分搜索不起作用。也不能假设密钥是可散列的,因此与dict or set哈希表查找不能用于加速搜索

据猜测,这是对从头到尾每个元素的直通检查。

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

--

编辑:Pythonlist.__contains__()函数,它实现了in运算符,定义于列表对象.c http://hg.python.org/cpython/file/05274ab06182/Objects/listobject.c:

   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 检测到您正在测试某个元素的成员资格constant list or set, like:

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

编辑 3 [@JohnMachin]:

常量列表优化为常量tuple见2.5-2.7和3.1-3.3。
常量集在 3.3 中被优化为(常量)冻结集。

另请参阅@CoryCarson 的回答。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在python中使用in运算符搜索列表时使用什么算法? 的相关文章

随机推荐

  • Web 部署的 TFS 2012 构建定义忽略项目文件中定义的参数

    我正在尝试设置一个 TFS 2012 构建定义 该定义将构建一个解决方案并在该解决方案中部署多个 Web 应用程序 我碰到本文 http chriskadel com 2013 03 20 using tfs to build and de
  • 合并pandas数据框,进行列操作

    我搜索了档案 但没有找到我想要的东西 可能是因为我真的不知道该使用什么关键词 这是我的问题 我有一堆数据帧需要合并 我还想用数据帧的总和来更新列子集的值 例如 我有两个数据框 df1 和 df2 df1 pd DataFrame 1 2 1
  • 正则表达式查找完整的文本并插入空格

    我正在建立一个论坛 目前处于测试阶段 用户已经开始利用某些东西 例如发布没有空格的长文本字符串 这会拉伸屏幕并破坏某些样式 我刚刚开始使用这段代码并且运行良好 int charIndex 0 int noSpaceCount 0 forea
  • appengine 上的聊天应用程序

    我愿意在 App Engine 上实现一个聊天网站 但我发现App Engine不允许我使用服务器推送 因为它会在 30 秒后终止响应 那么还有什么方法可以 使用 轮询会导致不良用户吗 经验 意味着用户将 需要等待一段时间才能 从服务器检索
  • CSS 缩小并用 gulp 重命名

    我有一个像这样的变量 var files foo css foo min css bar css bar min css 我想要吞咽为我做的是minify文件然后rename for me 但任务目前写为 对于一个文件 gulp task
  • numpy 数组中数字前的冒号

    我正在使用相机将原始数据存储在 numpy 数组中 但我不知道 numpy 数组中数字前面的冒号意味着什么 import numpy as np import picamera camera picamera PiCamera camera
  • Android:当url包含http时,在设置WebViewCore之前不支持removeMessages(int What = 107)

    我编写了一个简单的程序 它将网页加载到网络视图中 URL 包含 http 并且 Web 视图工作得很好 除了这个恼人的 107 错误之外 大多数人说这是因为你的 url 不包含 http 标头 我在网上搜索了所有内容 但找不到与我的情况类似
  • 如何显示完整的数组?

    我得到这个error 对象对象 对象对象 对象对象 我想像这样显示完整的数组 无名氏 安娜 史密斯 彼得 琼斯 h2 Create Object from JSON String h2 p p
  • 如何从函数返回 &Path?

    我试图了解如何编写正确的 Rust 代码 但我认为我可能高估了编译器理解对象生命周期的能力 这是我期望它工作的代码 use std path Path use std env use rusqlite SqliteConnection st
  • Vlookup复制单元格的颜色

    我有以下表格 A B C D 1 Bob 1 6 Football 2 Nate 3 7 Baseball 3 Silver 3 2 Baseball 4 Box 7 1 Cycling A D Bob Nate 我可以成功使用Vlooku
  • “TypeError:‘StratifiedShuffleSplit’对象不可迭代”的原因可能是什么?

    我必须交付一个机器学习项目 我收到了一个名为tester py 在另一个文件中编写完代码后 我必须运行 tester py 才能查看结果 但出现错误 TypeError StratifiedShuffleSplit object is no
  • mysql 选择内部限制

    select id from tableABC limit select count id from tableCBA 1 如果我需要在限制中进行选择 如我在示例代码中所示 我该如何在 mySql 中执行此操作 这只是本论坛的简化代码 否则
  • 设置 MaxTextWidth 时出现 WPF 字对齐问题

    我正在使用 FormattedText 来显示文本 我需要根据提供的选项水平对齐文本 一切正常 直到我设置 MaxTextWidth 属性 我需要它来进行文字修剪 如何在启用文字修剪的情况下对齐文本 FormattedText format
  • 我如何在 C# 中执行 sscanf

    我如何在 C 中执行此操作 int a b c sscanf astring d d d a b c 最少的代码和依赖项是更好的 是否有一些内置的正则表达式的东西 我正在使用 c 4 0 如果像 scannf 一样 您愿意假设用户将提供完全
  • 在 Xcode 中,如何在块内添加断点?

    我有一个返回块的方法 我想在块内添加一个断点 在 Xcode 中 在块内的行上添加断点会导致执行在方法返回时暂停 而不是在执行块时暂停 如何在块内添加断点 我遇到了同样的困难 直到我尝试使用 Xcode 4 的 LLDB 调试器 转到 产品
  • 如何在命令行中使用VLC保存视频流?

    我正在尝试在 Window 7 Basic 的命令行中使用 VLC 保存在线视频 以下是我尝试过并部分起作用的一些事情 I movies gt vlc http media ch9 ms ch9 7492 a92ae0a6 7b81 411
  • C 和 doxygen - 删除变量文档的重复项

    我正在使用 doxygen 记录我的 C 代码 为了更好的可读性 我将每个 c h 文件对 有时还有更多文件 的文档分组为defgroup and addtogroup see c 中的 doxygen 定义分组 https stackov
  • Actionscript 3可以在数组中设置对象的多个变量吗?

    现在我有很多MovieClips在我的数组中 我想更新所有alpha我的数组中 MovieClip 的值 现在 我正在使用 for 循环 但这不是最快的方法 有没有办法为数组中的所有项目设置值 Thanks No ActionScript没
  • 未捕获的类型错误:将 vue 升级到 3.x 后无法读取未定义的属性(读取“扩展”)

    今天我将我的 google chrome 扩展 vue 版本升级到 3 x 当运行该应用程序时 google chrome 扩展弹出控制台显示如下错误 commons1 js 13392 Uncaught TypeError Cannot
  • 在python中使用in运算符搜索列表时使用什么算法?

    当使用 in 运算符搜索列表中的项目时 例如 if item in list print item 使用什么算法来搜索该项目 是从头到尾直接搜索列表还是使用二分搜索之类的东西 list不能假定 s 是按排序顺序 或任何顺序 的 因此二分搜索