python中几个常见的黑盒子之“字典dict” 与 “集合set”
这里说到“字典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 L
- False
- >>> S = set(L)
- >>> 52 in L
- False
我们通过上面这个例子,可以发现:第二种方法在list之上再次构建了一个set。看起来是毫无意义的事情,但是其实这取决于实际的情况,因为:
当我们打算对上个例子中的 “L” 进行多次查询的话,第二种方法应该是值得的,因为成员的查询(不知道下标的情况下),在list中时间复杂度来说是线性的,但是在set中确实常数级的。
当我们想依次往某个集合里面添加新值的时候,并且在每一步中都检查是否这个新值添加成功的话,如果用list来处理的话,运行时间会是平方级别的,但是用集合set就可以获得线性级时间。
python中几个常见的黑盒子之“字典dict” 与 “集合set”的更多相关文章
- python中几个常见的“黑盒子”之 列表list
python常见的数据类型有:字符串,布尔类型,整数,浮点数,数字,日期,列表,元祖,字典.相信前面6个大家都非常的熟悉,但是对于python的列表,元祖,字典我有时候一直在想其内部的实现是怎么样子的 ...
- Python中执行系统命令常见的几种方法--转载
Python中执行系统命令常见的几种方法 Python中执行系统命令常见的几种方法有: (1)os.system # 仅仅在一个子终端运行系统命令,而不能获取命令执行后的返回信息 # 如果再命令行下执 ...
- python基础之字典dict和集合set
作者:tongqingliu 转载请注明出处:http://www.cnblogs.com/liutongqing/p/7043642.html python基础之字典dict和集合set 字典dic ...
- Python中的数据类型常见方法
list() 方法 1.cmp(list1, list2):#比较两个列表的元素 2.len(list):#列表元素个数 3.max(list):#返回列表元素最大值 4.min(list):#返回列 ...
- Python 中的字符串(str)、字典(dict)详解及操作方法
一.字符串 在python中字符串是一种重要数据类型.其他数据类型分别为: 数字-number -------- int.long.float.complex这几种 字符串-string ------ ...
- 第4.4节 Python解析与推导:列表解析、字典解析、集合解析
一. 引言 经过前几个章节的介绍,终于把与列表解析的前置内容介绍完了,本节老猿将列表解析.字典解析.集合解析进行统一的介绍. 前面章节老猿好几次说到了要介绍列表解析,但老猿认为涉及知识层面比较多 ...
- Python — 字典dict 和 集合set
字典dict : dict和set的key都是不可变对象 对于不变对象来说,调用对象自身的任意方法,也不会改变对象自身的内容.相反,这些方法会创建新的对象并返回,这样,就保证了不可变对象本身永远是不可 ...
- python中字符串的常见操作方法
1. 字符串概念,字符串是一个容器,包含若干个字符并按照一定的顺序组织成一个整体.字符串支持索引操作. 2. 创建字符串基本语法 变量名 = "字符串信息" 变量名 = '字符串信 ...
- python中字符串的常见操作
demo:mystr = 'hello python' 1.find:mystr.find(str, start=0, end=len(mystr)),检测字符串中是否有要查询的字符,如果有返回开始的 ...
随机推荐
- linux下jdk和tomcat的安装配置
操作系统:centos (32bit) 1. 下载合适的安装包. 原则是:安装包类型和(bit)位数要与操作系统一致,tomcat和jdk的版本要兼容,如: apache-tomcat-6.0.37 ...
- CocoaPods安装及使用《转》
http://www.cnblogs.com/eagley/p/5407721.html
- cocos2d-js去掉左下角的三行数字(帧数)
project.json 里面"showFPS": true, 改成 false 就行了... 调整帧率也在这里调整 或者是 同cocos2dx,cocos2d-js左下角的FPS ...
- javascript 零星知识点
通过js动态生成的元素绑定事件.不能通过js获取元素对象,并赋予事件,最简捷的途径就是将事件直接添加到属性中(DOM0);
- HTTPS 和 HTTP
https://www.zhihu.com/question/52790301
- 在sql server中利用with as实现递归功能
在sqlserver2005之前,要实现递归功能比较麻烦,比如可能会要用到临时表与while语句来循环.自sqlserver2005之后,新增了with as功能语法,即 公用表达式(CTE),让递归 ...
- 我的第一个web应用开发搭建-环境配置
MyEclipse 2014 破解图文详细教程 MyEclipse作为Java EE最受欢迎的IDE,最新版本为2014版,MyEclipse 2014破解的方法. 一.安装完成MyEclipse20 ...
- MATLAB与C#混合编程 之 double与MWArray 、MWNumericArray 转化
double acc_ang_d;//待计算组 MWNumericArray eng_input_array = new MWNumericArray(acc_ang_d); MWArray eng_ ...
- CentOS 安装rz和sz命令
虚机装了CentOS7.2最小版本, 结果上去后发现rz命令不能用 yum install lrzsz 安装完成:
- 找到文字进行标记(replaceWith)
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...