简单总结Python中序列与字典的相同和不同之处


Posted in Python onJanuary 19, 2016

共同点:
1.它们都是python的核心类型,是python语言自身的一部分

核心类型与非核心类型
多数核心类型可通过特定语法来生成其对象,比如"dave"就是创建字符串类型的对象的表达式;
非核心类型需要内置函数来创建,比如文件类型需要调用内置函数open()来创建。
类也可以理解成自定义的非核心类型。

2.边界检查都不允许超越索引边界

>>> a = 'dave'
>>> a[3]

'e'

>>> a[4]
Traceback (most recent call last):
 File "<stdin>", line 1, in <module>
IndexError: string index out of range

3.索引方法都使用[ ]

>>> a = 'dave'
>>> print a[0]
d
>>> a = ['d','a','v','e']
>>> print a[0]
d
>>> a = ('d','a','v','e')
>>> print a[0]
d

4.大部分都支持迭代协议

不同点:

1.有序性
字符串,列表,元组是序列,元组可理解成不可变的列表
字典是python中唯一的映射类型
序列有有序性,字典没有顺序

2.可变性
列表,字典具有可变性.
字符串,元组,数字具有不可变性,即复制后对应存储空间的内容不可变,除非这个对象被销毁.
例如:

>>> s = 'dave'
>>> id(s)
140105068006304
>>> s = 'python' + s[1:]
>>> s
'pythonave'
>>> id(s)
140105067997536

第一行的s指向内存空间140105068006304,存储了字符串'dave'
第二行的s变成了'pythonave',但它只是重新指向了一个存储着'pythonave'字符串的内存地址.原来140105068006304的内存空间可能还是'dave',也可能被系统清理销毁.

3.序列操作
序列(字符串,列表,元组)支持,映射(字典)不支持
注意:序列操作生成的类型不变

>>> seq = 'dave'
>>> print seq[1:]
ave
>>> seq = ['d','a','v','e']
>>> print seq[1:]
['a', 'v', 'e']
>>> seq = ('d','a','v','e')
>>> print seq[1:]
('a', 'v', 'e')

4.列表解析表达式

表达式中支持序列(字符串,列表,元组),也支持映射(字典)
和序列操作不同的是,列表解析表达式生成的只能是一个列表.

>>> str = [ a * 2 for a in 'dave' ]
>>> print str
['dd', 'aa', 'vv', 'ee']
>>> L1 = [1,2,3]
>>> L2 = [4,5,6]
>>> L3 = [(a+b) for (a,b) in zip(L1,L2)]
>>> print L3
[5, 7, 9]
>>> tup = (1,2,3)
>>> tups = [ a * 2 for a in tup]
>>> print tups
[2, 4, 6]
>>> dic = {'a':'dave','b':'emily'}
>>> dics = [ i *2 for i in dic.items()]
>>> print dics
[('a', 'dave', 'a', 'dave'), ('b', 'emily', 'b', 'emily')]

字典的items(),keys(),values()方法都是返回的列表,这里的for i in a写for i ina.keys(),效果等同。

>>> dic = {'a':'dave','b':'emily'}
>>> dicts = [ i * 2 for i in dic]
>>> print dicts
['aa', 'bb']

5.嵌套

除了字符串外,列表,元组,字典可以相互多层嵌套
嵌套与可变性是不冲突的。
tup = (4, 5, a)中所记忆,录入的b是个变量指针,或者叫内存地址,是个数字。

>>> a = [1,2,3]
>>> tup = (4,5,a)
>>> print tup[2]
[1, 2, 3]
>>> a[0] = 'x'
>>> print tup[2]
['x', 2, 3]

a指向一个列表,列表具有可变性,所以b[0]='x'的操作后,对元组的索引可以看到变化

>>> a = '123'
>>> tup = (4,5,a)
>>> print tup[2]
123
>>> a = 'xxx'
>>> print tup[2]
123

a指向一个字符串,字符串具有不可变性,所以a = 'xxx'的操作后,a这个指针本身就改变了,重新指向另一段内存空间,而tup元组中记忆的内存地址所指空间并没有变,还是字符串'123'

上面2段,元组tup始终保持不可变性,要变化也是其元素作为指针所指向内存的变化.

Python 相关文章推荐
python pickle 和 shelve模块的用法
Sep 16 Python
Python Web框架Flask中使用新浪SAE云存储实例
Feb 08 Python
深入理解Javascript中的this关键字
Mar 27 Python
python字典基本操作实例分析
Jul 11 Python
Python中使用Queue和Condition进行线程同步的方法
Jan 19 Python
Python解析excel文件存入sqlite数据库的方法
Nov 15 Python
pytorch 调整某一维度数据顺序的方法
Dec 08 Python
Python自定义一个异常类的方法
Jun 27 Python
10行Python代码计算汽车数量的实现方法
Oct 23 Python
Python如何使用函数做字典的值
Nov 30 Python
Python转换字典成为对象,可以用&quot;.&quot;方式访问对象属性实例
May 11 Python
python利用 keyboard 库记录键盘事件
Oct 16 Python
举例讲解如何在Python编程中进行迭代和遍历
Jan 19 #Python
Python的自动化部署模块Fabric的安装及使用指南
Jan 19 #Python
Python编程中time模块的一些关键用法解析
Jan 19 #Python
Python编程中的文件读写及相关的文件对象方法讲解
Jan 19 #Python
Python使用os模块和fileinput模块来操作文件目录
Jan 19 #Python
举例讲解Python面相对象编程中对象的属性与类的方法
Jan 19 #Python
python结合API实现即时天气信息
Jan 19 #Python
You might like
雄兵连:天使彦天使彦为爱折翼,彦和炙心同时念动的誓言!
2020/03/02 国漫
PHP连接MySQL的2种方法小结以及防止乱码
2014/03/11 PHP
PHP采用超长(超大)数字运算防止数字以科学计数法显示的方法
2016/04/01 PHP
PHP异常处理定义与使用方法分析
2017/07/25 PHP
Laravel5.1 框架表单验证操作实例详解
2020/01/07 PHP
基于jQuery的ajax功能实现web service的json转化
2009/08/29 Javascript
js冒泡、捕获事件及阻止冒泡方法详细总结
2014/05/08 Javascript
jquery中post方法用法实例
2014/10/21 Javascript
Flash图片上传组件 swfupload使用指南
2015/03/14 Javascript
使用jQuery实现图片遮罩半透明坠落遮挡
2015/03/16 Javascript
js+html5实现可在手机上玩的拼图游戏
2015/07/17 Javascript
JavaScript如何调试有哪些建议和技巧附五款有用的调试工具
2015/10/28 Javascript
js针对ip地址、子网掩码、网关的逻辑性判断
2016/01/06 Javascript
AngularJS初始化静态模板详解
2016/01/14 Javascript
JS实现的随机排序功能算法示例
2017/06/09 Javascript
详解VueRouter进阶之导航钩子和路由元信息
2017/09/13 Javascript
详解vue mint-ui源码解析之loadmore组件
2017/10/11 Javascript
详解vue-cli脚手架build目录中的dev-server.js配置文件
2017/11/24 Javascript
Angular2.0/4.0 使用Echarts图表的示例代码
2017/12/07 Javascript
小程序接口的promise化的实现方法
2019/12/11 Javascript
详解Node.JS模块 process
2020/08/31 Javascript
举例讲解Linux系统下Python调用系统Shell的方法
2015/11/07 Python
Python中的上下文管理器和with语句的使用
2018/04/17 Python
python生成多个只含0,1元素的随机数组或列表的实例
2018/11/12 Python
Python3利用Dlib实现摄像头实时人脸检测和平铺显示示例
2019/02/21 Python
python实现定时压缩指定文件夹发送邮件
2020/12/22 Python
Python3常用内置方法代码实例
2019/11/18 Python
python循环输出三角形图案的例子
2019/11/22 Python
HTML5 manifest离线缓存的示例代码
2018/08/08 HTML / CSS
美国专业级皮肤病和spa品质护肤品的高级零售网站:SkinCareRx
2017/02/06 全球购物
bareMinerals官网:矿物质化妆品和护肤品
2018/02/04 全球购物
最新销售员个人自荐信
2013/09/21 职场文书
大学生党课思想汇报
2013/12/29 职场文书
《搭石》教学反思
2014/04/07 职场文书
爱情保证书
2015/01/17 职场文书
数学复习课教学反思
2016/02/18 职场文书