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

为什么`{*l}`比`set(l)`-python集合快(并不是只适用于集合,适用于所有序列)

公孙俭
2023-03-14

下面是我的时间:

>>> import timeit
>>> timeit.timeit(lambda: set(l))
0.7210583936611334
>>> timeit.timeit(lambda: {*l})
0.5386332845236943

为什么,我的意见是一样的,但事实并非如此。

所以从这个例子中开箱很快,对吧?

共有1个答案

应瀚
2023-03-14

出于同样的原因,[]list()快;解释器包括对使用专用代码路径的基于语法的操作的专用支持,而构造函数调用涉及:

  1. 从内置作用域加载构造函数(需要一对dict查找,一个在全局作用域中,另一个在失败时在内置作用域中)
  2. 需要通过泛型可调用的调度机制和泛型参数解析代码进行调度,所有这些都远比将其所有参数作为C数组从堆栈中读取的单个字节代码昂贵

所有这些优点都与固定的开销有关;这两种方法的big-O是相同的,因此{*range(10000)}不会明显地/可靠地比set(range(10000))快,因为实际构建工作大大超过了通过泛型分派加载和调用构造函数的开销。

 类似资料:
  • 为什么只适用于s而不适用于s?有什么特别的原因吗?

  • 问题内容: 很抱歉打扰-也许这是一个非常简单的问题- 但由于某些原因,下面的版本无法解析,而带有set的版本可以正常工作。实际上,如果我仅使用set版本并将set替换为list,则会得到: 嵌套异常为org.hibernate.InvalidMappingException:无法从无效映射中解析映射文档 谢谢米莎 问题答案: 你说 而带有set的版本可以正常工作 这是清单DOCTYPE 您可以看到

  • 我的python 2.7脚本在我的Ubuntu系统上工作,如果我称之为使用 或从bash脚本使用 但是如果我从Py魅力调用它,我会得到oauth错误,并且从命令提示符 在导入熊猫行抛出一个错误: 我试过了 如Python Pandas中所述,卸载pip,然后为熊猫、Numpy和smpy安装pip-缺少必需的依赖项['Numpy'] 1 上面使用了标志-升级和-用户来尝试让包应用到我的用户帐户而不是

  • 主要内容:Python创建set集合,Python访问set集合元素,Python删除set集合Python 中的集合,和数学中的集合概念一样,用来保存不重复的元素,即集合中的元素都是唯一的,互不相同。 从形式上看,和字典类似,Python 集合会将所有元素放在一对大括号 {} 中,相邻元素之间用“,”分隔,如下所示: {element1,element2,...,elementn} 其中,elementn 表示集合中的元素,个数没有限制。 从内容上看,同一集合中,只能存储不可变的数据类型,

  • 问题内容: 为了进行快速测试,调试,创建可移植的示例和进行基准测试,R提供了许多数据集(在Base R包中)。R提示符下的命令描述了近100个历史数据集,每个数据集都有相关的描述和元数据。 Python有这样的东西吗? 问题答案: 您可以使用package从Python访问所有R数据集。 设置界面: 然后使用可用数据集的任何数据集名称进行调用(就像中的一样) 要查看可用数据集的列表以及每个数据集的

  • 我有一个表单,它的设置与此类似: 现在我在表单所在的同一个页面上也有一个按钮,它执行一个jQuery函数。这个函数在表单中添加了一个额外的文本区域(名称=“项目[]”。因此,如果用户点击该按钮两次,我最终会有三个文本区域。 现在,当用户提交表单时,它将转到另一个页面:测试。php页面。在这个页面中,我执行了一个PHP脚本,在该脚本中,我测试POST是否已设置,然后捕获POST值。。 现在每个用户都