博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
python中几个常见的黑盒子之“字典dict” 与 “集合set”
阅读量:7032 次
发布时间:2019-06-28

本文共 833 字,大约阅读时间需要 2 分钟。

这里说到“字典dict” 和 “集合set”类型,首先,先了解一下,对于python来说,标准散列机制是有hash函数提供的,对于调用一个__hash__方法:

>>> hash(56)56>>> hash("I like python")-4698211515002810579

对于这种标准散列的机制,常常用于字典类型(dict)的实现,而dict就是我们通常所说的散列表。同样,集合类型(set)也是通过这种机制进行实现的。

最重要的一点:散列值的构成基本上是在常数级时间内完成的,而且,就算其幕后数组足够长,我们用散列值对其访问的平均时间也是O(1).

这就意味着,我们在对 dict 以及set中的元素进行访问的时候,所消耗的时间都是常数级的。

注意:hash方法是特别用来构建哈希表的。对于其他比如密码的哈希,有一个标准库叫做hashlib模块

下面我们来看一个例子,对于上面内容很好的实践:

>>> from random import randrange>>> L = [randrange(10000) for i in range(1000)]>>> 52 in LFalse>>> S = set(L)>>> 52 in LFalse

我们通过上面这个例子,可以发现:第二种方法在list之上再次构建了一个set。看起来是毫无意义的事情,但是其实这取决于实际的情况,因为:

  当我们打算对上个例子中的 “L” 进行多次查询的话,第二种方法应该是值得的,因为成员的查询(不知道下标的情况下),在list中时间复杂度来说是线性的,但是在set中确实常数级的。

  当我们想依次往某个集合里面添加新值的时候,并且在每一步中都检查是否这个新值添加成功的话,如果用list来处理的话,运行时间会是平方级别的,但是用集合set就可以获得线性级时间。

转载于:https://www.cnblogs.com/ShaunChen/p/6227852.html

你可能感兴趣的文章
fiddler工具的使用
查看>>
jquery源码分析(二)——架构设计
查看>>
javascript深入理解js闭包(转)
查看>>
207. Course Schedule
查看>>
如何优化您的 Android 应用 (Go 版)
查看>>
Trie树实现
查看>>
Opencv无法调用cvCaptureFromCAM无法打开电脑自带摄像头
查看>>
Exception异常处理机制
查看>>
复杂的web---web中B/S网络架构
查看>>
编写文档的时候各种问题
查看>>
Eclipse里maven的project报Unbound classpath variable: 'M2_REPO/**/***/***.jar
查看>>
新旅程CSS 基础篇分享一
查看>>
查看内核函数调用的调试方法【原创】
查看>>
个人项目中遇到的问题
查看>>
byte与base64string的相互转化以及加密算法
查看>>
20145103 《Java程序设计》第3周学习总结
查看>>
ubuntu声音系统
查看>>
哈哈更新资源列表2
查看>>
冲刺第一周第五天
查看>>
Java 接口
查看>>