1. dict

Python中的dict等于js中的 map ,使用键-值(key-value)存储,具有极快的查找速度。

如果 我们要根据同学的姓名去查找他的成绩在不用dict的情况下。就需要两个list:

names = ['Michael', 'Bob', 'Tracy']

scores = [95, 75, 85]

// 通过一个名字,去查找对应的位置,再从scores中取出对应的成绩

这样导致list的越来越长,速度越来越慢

// 如果通过dict实现,只需要“名字-成绩”就行,无论这个表多大,查找速度都不会变慢,如下:

>>> d = {'Michael': 95, 'Bob': 75, 'Tracy': 85}

>>> d['Michael']

95

原理: 因为dict是通过索引去查找的而不是通过遍历的方式去找的。

// 除了初始化指定外,还可以通过key放入:

>>> d['Adam'] = 67

>>> d['Adam']

67

// 由于一个key只能对应一个value,所以,多次对一个key放入value,后面的值会把前面的值冲掉:

>>> d['Jack'] = 90

>>> d['Jack']

90

>>> d['Jack'] = 88

>>> d['Jack']

88

如果key不存在,dict将会报错。 可以通过in判断key是否存在

或者通过get()方法

// in 方法

>>> 'Thomas' in d

False

// get() key不存在返回None

>>> d.get('Thomas')

>>> d.get('Thomas', -1)

-1

// 删除key 通过 pop()方法

>>> d.pop('Bob')

75

>>> d

{'Michael': 95, 'Tracy': 85}

注意点:

1. dict 内部存放的顺序和key的放入顺序没有关系

2. 和list比较

2.1 查找和插入速度极快,不会随着key的增加而变慢

2.2 需要占用大量的内存,内存浪费多

3. 和list相反

3.1 查找和插入时间随着元素的增加而增加

3.2 占用空间小,浪费内存少

4. dict是一种以空间换时间的方法

5. dict的key必须是不可变对象

6. 字符串和整数等不可变,可以作为key,而list的则不行。

2. set

和dict类似,但是不存储value,key不重复。创建set,需要提供一个list作为输入集合,如下:

>>> s = set([1, 2, 3])

>>> s

{1, 2, 3}

// 传入的参数[1, 2, 3]是一个list,而显示的{1, 2,

3}只是告诉你这个set内部有1,2,3这3个元素,

显示的顺序也不表示set是有序的

// set中重复将会被过滤

>>> s = set([1, 1, 2, 2, 3, 3])

>>> s

{1, 2, 3}

// 通过add(key)可以向set中添加元素,可以重复添加但无效果

>>> s.add(4)

>>> s

{1, 2, 3, 4}

>>> s.add(4)

>>> s

{1, 2, 3, 4}

// 通过remove(key)删除元素

>>> s.remove(4)

>>> s

{1, 2, 3}

set和dict的区别仅在于没有存储对应的value。

3. 不可变对象

对于可变对象,对它进行操作,对象本想将会变化

>>> a = ['c', 'b', 'a']

>>> a.sort()

>>> a

['a', 'b', 'c']

对于不可变对象,对象本身不会变化

>>> a = 'abc'

>>> a.replace('a', 'A')

'Abc'

>>> a

'abc'

所以,对于不变对象来说,调用对象自身的任意方法,也不会改变该对象自身的内容。相反,这些方法会创建新的对象并返回,这样,就保证了不可变对象本身永远是不可变的。

作者:lieone

python set 原理_Python基础教程之dict和set相关推荐

  1. python 几何教学_python gdal教程之:几何形状geometry与投影projection

    建立空的geometry对象:ogr.Geometry 定义各种不同的geometry使用的方法是不一样的(point, line, polygon, etc) 新建点point,使用方法AddPoi ...

  2. python设置mysql外键_python基础教程之MySQL数据库之-foreign key 外键(一

    今日重点:外键 一对多 多对多 一对一 -------------------------------------------------------------------------------- ...

  3. python浮点数运算问题_python基础教程之. 浮点数运算:问题和局限

    14. 浮点数运算:问题和局限¶ 浮点数在计算机硬件中表示为以 2 为底(二进制)的小数.例如,十进制小数 0.125 是1/10 + 2/100 + 5/1000 的值,同样二进制小数 0.001 ...

  4. python入门之字符串处理_python基础教程之python字符串处理方法|python基础教程|python入门|python教程...

    https://www.xin3721.com/eschool/pythonxin3721/ 字符和字符串可以用来相加来组合成一个字符串输出: 字符或字符串复制输出. 二.Extract &S ...

  5. python零基础入门建模_python基础教程之Python 建模步骤|python基础教程|python入门|python教程...

    #%%#载入数据 .查看相关信息 importpandas as pdimportnumpy as npfrom sklearn.preprocessing importLabelEncoderpri ...

  6. python爬取bilibili数据_python基础教程之selenium+phantomjs爬取bilibili

    selenium+phantomjs爬取bilibili 首先我们要下载phantomjs 你可以到 http://phantomjs.org/download.html 这里去下载 下载完之后解压到 ...

  7. python浮点数的范围和精度_python基础教程之C#教程之C#中float的取值范围和精度分析...

    https://www.xin3721.com/eschool/pythonxin3721/ 本文实例分析了C#中float的取值范围和精度.分享给大家供大家参考.具体分析如下: float类型的表现 ...

  8. python爬虫思路流程_python基础教程之【Python爬虫】爬了七天七夜,终|python基础教程|python入门|python教程...

    https://www.xin3721.com/eschool/pythonxin3721/ 起因 为了督促自己更加积极地写博客,我希望有一个排名系统能让我看到自己的进步.但是博客园对用户的排名体系相 ...

  9. python networkx教程_Python 学习教程之networkx

    networkx是Python的一个包,用于构建和操作复杂的图结构,提供分析图的算法.图是由顶点.边和可选的属性构成的数据结构,顶点表示数据,边是由两个顶点唯一确定的,表示两个顶点之间的关系.顶点和边 ...

最新文章

  1. Entity Framework:Code-First Tutorial开篇
  2. 视频|结构光3D相机光机核心技术及3D成像性能分析
  3. 【错误记录】Visual Studio 中配置 NDK 头文件路径
  4. OpenCV的Python接口
  5. GitHub宣布GitHub Education 新计划,学校可免费用企业版
  6. 初探Golang(1)-变量
  7. 前端学习(2917):上午回顾
  8. mysql允许所有用户连接_Mysql权限控制 - 允许用户远程连接
  9. js读写json文件
  10. 自定义QLabel 控件
  11. 谷歌浏览器:快速切换搜索引擎
  12. paypal快速支付流程图
  13. lpad()函数oracle,oracle 中lpad的用法
  14. PPT文档中如何插入超链接
  15. Arduino与Proteus仿真实例-LM75温度传感器驱动仿真
  16. 2022年执法资格城管执法考试多选题专项训练题及答案
  17. 2021-2027全球与中国射频屏蔽窗市场现状及未来发展趋势
  18. 游戏运营必学数据分析!
  19. linux发邮件失败,Linux SendMail发送邮件失败诊断案例,sendmail发送邮件
  20. 关于一些常见/好用的matlab工具箱介绍

热门文章

  1. 机器视觉中使用光源及偏振镜解决物体反光问题
  2. 11月13日云栖精选夜读:阿里云中间件产品科技普惠企业,满足多场景需求
  3. Python-进阶-装饰器小结
  4. Linux基础知识题解答(四)
  5. TEST DESIGN TECHNIQUES: AN OVERVIEW
  6. 一个简易版的T4代码生成框架
  7. lucene(全文搜索)_建立索引_根据关键字全文搜索_源码下载
  8. php.ini路径设置、libmysql.dll加载等
  9. 实训汇编语言设计——16位数拆分为4组
  10. 如何在html中选择wrap,jQuery - .wrap() 使用HTML包裹选取的元素