简单总结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之编写简单简单连接数据库并执行查询操作
Feb 27 Python
Python的Socket编程过程中实现UDP端口复用的实例分享
Mar 19 Python
python 根据pid杀死相应进程的方法
Jan 16 Python
用python编写第一个IDA插件的实例
May 29 Python
python生成密码字典的方法
Jul 06 Python
Selenium(Python web测试工具)基本用法详解
Aug 10 Python
Python脚本修改阿里云的访问控制列表的方法
Mar 08 Python
python中时间、日期、时间戳的转换的实现方法
Jul 06 Python
详解Matplotlib绘图之属性设置
Aug 23 Python
多版本python的pip 升级后, pip2 pip3 与python版本失配解决方法
Sep 11 Python
Python操作Excel工作簿的示例代码(\*.xlsx)
Mar 23 Python
python 追踪except信息方式
Apr 25 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
PHP获取数组长度或某个值出现次数的方法
2015/02/11 PHP
php的闭包(Closure)匿名函数详解
2015/02/22 PHP
php实现通用的从数据库表读取数据到数组的函数实例
2015/03/21 PHP
PHP接口并发测试的方法(推荐)
2016/12/15 PHP
php提交表单时保留多个空格及换行的文本样式的方法
2017/06/20 PHP
PHP实现基于栈的后缀表达式求值功能
2017/11/10 PHP
php获取微信共享收货地址的方法
2017/12/21 PHP
使用XHProf查找PHP性能瓶颈的实例
2017/12/13 PHP
Laravel 简单实现Ajax滚动加载示例
2019/10/22 PHP
js jquery做的图片连续滚动代码
2008/01/06 Javascript
JavaScript的类型转换(字符转数字 数字转字符)
2010/08/30 Javascript
Jquery中Ajax 缓存带来的影响的解决方法
2011/05/19 Javascript
JQuery控制radio选中和不选中方法总结
2015/04/15 Javascript
使用Node.js为其他程序编写扩展的基本方法
2015/06/23 Javascript
javascript实现网页屏蔽Backspace事件,输入框不屏蔽
2015/07/21 Javascript
如何动态加载外部Javascript文件
2015/12/02 Javascript
微信小程序实现搜索功能并跳转搜索结果页面
2019/05/18 Javascript
使用Phantomjs和Node完成网页的截屏快照的方法
2019/07/16 Javascript
js实现简单的点名器随机色实例代码
2020/09/20 Javascript
vue二选一tab栏切换新做法实现
2021/01/19 Vue.js
Python实现Linux的find命令实例分享
2017/06/04 Python
答题辅助python代码实现
2018/01/16 Python
使用python爬虫获取黄金价格的核心代码
2018/06/13 Python
树莓派安装OpenCV3完整过程的实现
2019/10/10 Python
基于python中__add__函数的用法
2019/11/25 Python
python实现音乐播放器 python实现花框音乐盒子
2020/02/25 Python
python matplotlib:plt.scatter() 大小和颜色参数详解
2020/04/14 Python
python飞机大战游戏实例讲解
2020/12/04 Python
Expedia爱尔兰:酒店、机票、租车及廉价假期
2017/01/02 全球购物
团员学习总结的自我评价范文
2013/10/14 职场文书
客服工作职责
2013/12/11 职场文书
关于中国梦的演讲稿
2014/04/23 职场文书
物理学专业自荐信
2014/06/11 职场文书
成绩报告单家长评语
2014/12/30 职场文书
创业计划书之奶茶店开店方案范本!
2019/08/06 职场文书
Python FuzzyWuzzy实现模糊匹配
2022/04/28 Python