简单总结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 subprocess模块学习总结
Mar 13 Python
跟老齐学Python之玩转字符串(2)
Sep 14 Python
简单介绍Python的Django框架加载模版的方式
Jul 20 Python
python编码最佳实践之总结
Feb 14 Python
Python使用正则表达式实现文本替换的方法
Apr 18 Python
Python编程使用*解包和itertools.product()求笛卡尔积的方法
Dec 18 Python
Python简单获取网卡名称及其IP地址的方法【基于psutil模块】
May 24 Python
解决Python下imread,imwrite不支持中文的问题
Dec 05 Python
python ChainMap 合并字典的实现步骤
Jun 11 Python
python打印9宫格、25宫格等奇数格 满足横竖斜相加和相等
Jul 19 Python
python控制台实现tab补全和清屏的例子
Aug 20 Python
Python文件操作模拟用户登陆代码实例
Jun 09 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/04 星际争霸
php模拟socket一次连接,多次发送数据的实现代码
2011/07/26 PHP
Yii2使用dropdownlist实现地区三级联动功能的方法
2016/07/18 PHP
ThinkPHP实现分页功能
2017/04/28 PHP
PHP实现微信支付(jsapi支付)流程步骤详解
2018/03/15 PHP
使用swoole 定时器变更超时未支付订单状态的解决方案
2019/07/24 PHP
用js判断浏览器是否是IE的比较好的办法
2007/05/08 Javascript
Dom加载让图片加载完再执行的脚本代码
2008/05/15 Javascript
JavaScript国旗变换效果代码
2008/08/13 Javascript
jQuery之网页换肤实现代码
2011/04/30 Javascript
JavaScript 盒模型 尺寸深入理解
2012/12/31 Javascript
探讨jQuery的ajax使用场景(c#)
2013/12/03 Javascript
JS实现仿Windows7风格的网页右键菜单效果代码
2015/09/11 Javascript
深入探秘jquery瀑布流的实现
2016/01/30 Javascript
url传递的参数值中包含&amp;时,url自动截断问题的解决方法
2016/08/02 Javascript
javascript动画之磁性吸附效果篇
2016/12/09 Javascript
Vue.js系列之vue-router(上)(3)
2017/01/03 Javascript
Angularjs中使用layDate日期控件示例
2017/01/11 Javascript
JS实现多级菜单中当前菜单不随页面跳转样式而发生变化
2017/05/30 Javascript
Vue.js中组件中的slot实例详解
2017/07/17 Javascript
js中的this的指向问题详解
2019/08/29 Javascript
解决layui动态添加的元素click等事件触发不了的问题
2019/09/20 Javascript
Vue 解决父组件跳转子路由后当前导航active样式消失问题
2020/07/21 Javascript
Python运算符重载用法实例
2015/05/28 Python
如何使用七牛Python SDK写一个同步脚本及使用教程
2015/08/23 Python
python字符串过滤性能比较5种方法
2017/06/22 Python
Python入门之三角函数sin()函数实例详解
2017/11/08 Python
pandas多级分组实现排序的方法
2018/04/20 Python
Python实现按当前日期(年、月、日)创建多级目录的方法
2018/04/26 Python
pandas读取csv文件提示不存在的解决方法及原因分析
2020/04/21 Python
毕业设计计划书
2014/01/09 职场文书
小学岗位竞聘方案
2014/01/22 职场文书
部队反四风对照检查材料
2014/09/26 职场文书
教师四风自我剖析材料
2014/09/30 职场文书
创作书写之导游词实用技巧分享(干货)
2019/12/20 职场文书
Mysql中存储引擎的区别及比较
2021/06/04 MySQL