当前位置: 首页 > news >正文

python 基础使用list、dict、set、可变与不可变对象

参考链接:https://www.liaoxuefeng.com/wiki/1016959663602400/1017104324028448

dict是字典,可以储存键值对类型的值,set与dict相同,只是set只储存key值,而不储存value。

补充:

  list.cout('a')查看list中'a'的个数

>>> l
['a', 2]
>>> l.count('a')
1

  

dict

  dict又称map,他以键值对的形式储存数据,并且为了查找方便,在存储数据的时候,会根据key的值去计算应该放置的位置。为了保证计算位置的算法的结果不冲突,所以就要求dict数据的key值不能重复。由于这种特性,使得在查找数据时,与list的从头开始查找相比,dict中储存的数据查找时极快的,但是对空间有些浪费,因为常规情况下的带储存数据经过算法处理后,并不会无间隔的紧密的按顺序放置在内存中,而是分散的。

dict的一些方法和特性

  一个key只能对应一个value

  可以通过in判断是否存在(只匹配key,不匹配value)

>>> l={'a':'1','b':'2'}
>>> 'a' in l     
True             
>>> '1' in l     
False            

  还可以通过 get() 方法获取指定key的内容,若key不存在,返回None,或者返回自己指定的内容

>>> l.get('a')
'1'
>>> l.get('1')#返回None
>>> l.get('1',aaa)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'aaa' is not defined#因为必须写“aaa”
>>> l.get('1',1111)
1111
>>>

  使用 pop(key) 方法删除指定的key值

  使用dict一定要注意,dict的key一定是不可变对象,在Python中,字符串、整数等都是不可变的,而list是可变的。

list与dict的区别:

  两者之间的区别主要在于查找速度和对储存的使用率上面

  1)list的查找速度会随着存放数据的数量的增加而增加,但占用的内存小,浪费内存还小。

  2)dict的查找速度极快,不会受存放数据数量大小的影响,但占用内存大,浪费空间多。

 

set

   set 和dict类似,也是一组 key 的集合,但不储存 value ,同样的key不能重复。

  使用一个list作为输入创建set

>>> s=set([1,2,'a'])#注意创建时传入的参数是一个list
>>> s
{1, 2, 'a'}#这样显示并不代表set是有序的
>>> s=set([1,2,'a','a']) 
>>> s 
{1, 2, 'a'} #不重复
>>>

  使用 add(key) 添加 key 到 set 中

>>> s.add('b')
>>> s.add('a')#重复添加没有效果
>>> s
{1, 2, 'a', 'b'}

  使用 romove(key) 删除

 set 可以看作为数学意义上的一个集合,这个集合中的元素是无序的、是不重复的,可以做数学意义上的交集、并集操作。

>>> b=set([3,4,'d'])
>>> s&b#交集
set()
>>> b
{'d', 3, 4}
>>> s|b#并集
{1, 2, 'a', 3, 4, 'b', 'd'}
>>>

  不能添加可变元素

>>> b.add([5,6])
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: unhashable type: 'list'
>>>

 

可变与不可变对象

  不可变对象就是虽然看起来对他的改变会生效,是因为其返回一个新的对象。如

>>> a = 'abc'
>>> b = a.replace('a', 'A')
>>> b
'Abc'
>>> a
'abc'

  而可变对象如 list 

>>> l=[1,2]
>>> l
[1, 2]
>>> l[0]='a'
>>> l
['a', 2]
>>>

  

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

 

  

 

转载于:https://www.cnblogs.com/Gaoqiking/p/10951707.html

相关文章:

  • Nginx 400错误研究
  • JavaScript函数使用知识点回顾
  • Unity移动端实时阴影绘制
  • 6.2docker(二)
  • jsp直接返回验证码
  • iis7负载均衡
  • 目录服务不能与此服务器复制,因为距上一次与此服务器复制的时间已经超过了 tombstone 生存时间。...
  • linux命令 route
  • 基于 HTML5 WebGL 的 3D 场景中的灯光效果
  • httptomcat
  • MySQL常用命令(转)
  • Head Html Css 第二版笔记
  • 比较快速排序,冒泡排序,双向冒泡排序的执行效率
  • 如何在vue-cli 3.x中使用jquery
  • Sentinel基本使用--熔断降级(基于RT, ExceptionRatio, ExceptionCount)
  • 实现windows 窗体的自己画,网上摘抄的,学习了
  • [iOS]Core Data浅析一 -- 启用Core Data
  • Android路由框架AnnoRouter:使用Java接口来定义路由跳转
  • Apache的基本使用
  • co模块的前端实现
  • CSS 三角实现
  • CSS相对定位
  • java小心机(3)| 浅析finalize()
  • PHP的类修饰符与访问修饰符
  • Redis字符串类型内部编码剖析
  • Swift 中的尾递归和蹦床
  • -- 查询加强-- 使用如何where子句进行筛选,% _ like的使用
  • 第13期 DApp 榜单 :来,吃我这波安利
  • 高度不固定时垂直居中
  • 工作手记之html2canvas使用概述
  • 后端_MYSQL
  • 机器学习学习笔记一
  • 开放才能进步!Angular和Wijmo一起走过的日子
  • 名企6年Java程序员的工作总结,写给在迷茫中的你!
  • 你真的知道 == 和 equals 的区别吗?
  • 少走弯路,给Java 1~5 年程序员的建议
  • 网页视频流m3u8/ts视频下载
  • 为什么要用IPython/Jupyter?
  • 我从编程教室毕业
  • 移动互联网+智能运营体系搭建=你家有金矿啊!
  • 继 XDL 之后,阿里妈妈开源大规模分布式图表征学习框架 Euler ...
  • 我们雇佣了一只大猴子...
  • ​2021半年盘点,不想你错过的重磅新书
  • #NOIP 2014# day.1 生活大爆炸版 石头剪刀布
  • (delphi11最新学习资料) Object Pascal 学习笔记---第5章第5节(delphi中的指针)
  • (Redis使用系列) Springboot 在redis中使用BloomFilter布隆过滤器机制 六
  • (二)fiber的基本认识
  • (附源码)springboot课程在线考试系统 毕业设计 655127
  • (附源码)ssm基于jsp的在线点餐系统 毕业设计 111016
  • (南京观海微电子)——COF介绍
  • (一)UDP基本编程步骤
  • (一一四)第九章编程练习
  • (转)AS3正则:元子符,元序列,标志,数量表达符
  • .NET Core引入性能分析引导优化
  • .NET Micro Framework 4.2 beta 源码探析