简单总结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序列之list和tuple常用方法以及注意事项
Jan 09 Python
Python3 socket同步通信简单示例
Jun 07 Python
Ubuntu下使用Python实现游戏制作中的切分图片功能
Mar 30 Python
多个应用共存的Django配置方法
May 30 Python
tensorflow saver 保存和恢复指定 tensor的实例讲解
Jul 26 Python
Python之指数与E记法的区别详解
Nov 21 Python
Python random模块制作简易的四位数验证码
Feb 01 Python
OpenCV 使用imread()函数读取图片的六种正确姿势
Jul 09 Python
无惧面试,带你搞懂python 装饰器
Aug 17 Python
python自动化测试三部曲之unittest框架的实现
Oct 07 Python
教你如何使用Python Tkinter库制作记事本
Jun 10 Python
python入门学习关于for else的特殊特性讲解
Nov 20 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
特详细的PHPMYADMIN简明安装教程
2008/08/01 PHP
PHP session_start()问题解疑(详细介绍)
2013/07/05 PHP
微信公众平台开发-微信服务器IP接口实例(含源码)
2017/03/05 PHP
PHP图像处理 imagestring添加图片水印与文字水印操作示例
2020/02/06 PHP
爱恋千雪-US-AscII加密解密工具(网页加密)下载
2007/06/06 Javascript
Bootstrap轮播插件使用代码
2016/10/11 Javascript
jQuery扩展+xml实现表单验证功能的方法
2016/12/25 Javascript
Angularjs中ng-repeat-start与ng-repeat-end的用法实例介绍
2016/12/31 Javascript
深入理解node.js之path模块
2017/05/03 Javascript
React-Router如何进行页面权限管理的方法
2017/12/06 Javascript
js构建二叉树进行数值数组的去重与优化详解
2018/03/26 Javascript
vue多层嵌套路由实例分析
2019/03/19 Javascript
JS去除字符串最后的逗号实例分析【四种方法】
2019/06/20 Javascript
ES6 Iterator接口和for...of循环用法分析
2019/07/31 Javascript
vue 关闭浏览器窗口的时候,清空localStorage的数据示例
2019/11/06 Javascript
Vue export import 导入导出的多种方式与区别介绍
2020/02/12 Javascript
vue搜索页开发实例代码详解(热门搜索,历史搜索,淘宝接口演示)
2020/04/11 Javascript
小程序选项卡以及swiper套用(跨页面)
2020/06/19 Javascript
js实现跳一跳小游戏
2020/07/31 Javascript
解决vue-router路由拦截造成死循环问题
2020/08/05 Javascript
封装 axios+promise通用请求函数操作
2020/08/11 Javascript
JS变量提升及函数提升实例解析
2020/09/03 Javascript
vue缓存之keep-alive的理解和应用详解
2020/11/02 Javascript
微信小程序中target和currentTarget的区别小结
2020/11/06 Javascript
python检测是文件还是目录的方法
2015/07/03 Python
pyside+pyqt实现鼠标右键菜单功能
2020/12/08 Python
python文字转语音的实例代码分析
2019/11/12 Python
Python GUI自动化实现绕过验证码登录
2020/01/10 Python
Django自定义全局403、404、500错误页面的示例代码
2020/03/08 Python
HTML5 Notification(桌面提醒)功能使用实例
2014/03/17 HTML / CSS
亚洲领先的旅游体验市场:Voyagin
2019/11/23 全球购物
四川internet信息高速公路(C#)笔试题
2012/02/29 面试题
工程部经理岗位职责
2013/12/08 职场文书
社区环境卫生倡议书
2015/04/29 职场文书
golang日志包logger的用法详解
2021/05/05 Golang
python turtle绘制多边形和跳跃和改变速度特效
2022/03/16 Python