Python内建数据结构详解


Posted in Python onFebruary 03, 2016

一、列表(List)

list 是一个可以在其中存储一系列项目的数据结构。list 的项目之间需用逗号分开,并用一对中括号括将所有的项目括起来,以表明这是一个 list 。下例用以展示 list 的一些基本操作:

# 定义一个 list 对象 class_list:
class_list = ['Michael', 'Bob', 'Tracy']
# 获得一个 class_list 的长度
print 'class have', len(class_list), 'students'
# 访问class_list中的对象
print 'The 3rd student in class is', class_list[2]
# 往 class_list 中插入对象
class_list.append('Paul')
# 从 class_list 中删除一个项目
del class_list[0]
# 对 class_list 进行排序
class_list.sort()
# 遍历整个class_list中的项目
print 'These students are :',
for student in class_list:
  print student,

输出结果为:

class have 3 students
The 3rd student in class is Tracy
These students are : Bob Paul Tracy

关于上面的代码有几点要注意的是:

可以往 class_list 中加入任何类型的对象,也就是说,并不要求一个 list 中的项目具有相同类型。你甚至可以往 class_list 中插入一个list。
排序函数作用于本身, 而不是返回一个副本,这与字符串类型是不同的,因为字符串不可修改。
print 函数的end关键字参数用来指定输入完成之后的输出,默认是换行符,上面的代码用空格符替代换行符。

二、元组(Tuple)

tuple 在用法与概念上与 list 没有多大差别,可以将 tuple 看做是一个只读版list。也就是说tuple一经定义便不能被修改——不能添加和删除对象,也不能修改tuple中的对象。

tuple中的项同样应该用逗号分开,并用圆括号将这些项目括起来以表是是一个tuple。这个圆括号是可选的,也就是说可以用以下两种方式定义一个tuple:

t = 'Adam', 'Lisa', 'Bart'
t = ('Adam', 'Lisa', 'Bart')
不过省掉那对圆括号不见得是什么好的习惯。另外当tuple只有一个项时,第一项之后必须有一个逗号,该情况下应该这样定义t = ('Adam',)。这似乎是一个古怪的约束,但是假如没有这个逗号,不带括号定义的tuple就变成了t = 'Adam'这明显具有二义性。

三、字典(Dictionary)

字典可以看做是一组键-值(key-value)对的集合。键必须是唯一的,而每一个键关联着一个值。key必须是一个不可变的对象(如:tuple、数值型、字符串)。还要注意的是,在字典中的键值对并没有以任何方式进行排序。

一个字典的定义应该照这样的格式d={key1 : value1, key2 : value2, key3 : value3}。键和值之间用冒号分隔,而键值对之间用逗号相隔,再用大括号将所有的键值对括起来。一些基本操作如下:

# 字典的定义
d = {
  'Adam': 95,
  'Lisa': 85,
  'Bart': 59
}
# 通过键来获取值
print "Adam's score is", d['Adam']
# 删除一个键值对
del d['Bart']
# 遍历字典
for name, score in d.items():
  print '{0} is {1}'.format(name, score)
# 往字典中增加一个键值对
d['Paul'] = 72
# 判断字典中是否存在某键,也可以用 if ab.has_key('Lisa')
if 'Lisa' in d:
  print "Lisa's address is", d['Lisa']

输出的结果为:

Adam's score is 95
Lisa is 85
Adam is 95
Lisa's address is 85

四、序列(Sequences)

上面介绍的三种内建数据结构都是序列,索引操作是序列的一个基本操作。通过下标操作可以直接访问序列中的对象。上面虽然已经演示了下标操作——队列和元组用数字下标,字典用关键字下标。

序列的下标是从0开始的,上面的例子中只使用了下标为正数的情况,其实下标还可以为负数,如-1,-2,-3…。负数下标表示的意义为反方向的位置,如class_list[-1]返回的是class_list的倒数第一个项目。

序列不但支持负数下标还支持双下标,这对双下标表示一个区间。如class_list[0:3]返回的是一个class_list中从下标为1到下标为3之前的子序列副本。注意这个区间是一对半闭半开的区间。这种操作被称作切片操作(slicing operation)。如果切片操作的第二个下标超出了序列的范围,那么切片操作会到序列的末尾终止。切片操作中的两个下标都有默认值,第一个的默认值为0,第二个的大小为序列的长度。

还可以给切片操作提供第三个参数,第三个参数代表切片操作的步长,它的默认值是1。步长代表了项与项之间的间距,比方name[0:10:3],返回的就是name中下标为0,3,6,9组成的子序列。

五、集合(Set)

集合是无序简单对象的聚集。当你只关注一个对象是否存在于聚集中,而不管它存在的顺序或在出现的次数时,则适宜用集合。基本功能:判断是否是集合的成员、一个集合是不是另一个集合的子集、获取两个集合的交集等等。实例:

s = set(['Adam', 'Lisa', 'Bart', 'Paul'])
# 判断对象是否在集合中
if 'Bart' in s:
  print "Bart is in ?", 'Bart' in s
# 使用copy函数来拷贝一个set
sc = s.copy()
# 往集合中添加对象
sc.add('Bill')
# 从集合中删除对象
sc.remove('Adam')
# 求两个集合的交集,也可以使用 s.intersection(sc)
print s & sc

输出的结果:

Bart is in ? True
set(['Lisa', 'Paul', 'Bart'])
Python 相关文章推荐
python将xml xsl文件生成html文件存储示例讲解
Dec 03 Python
Linux下使用python自动修改本机网关代码分享
May 21 Python
Python定时器实例代码
Nov 01 Python
利用Python将数值型特征进行离散化操作的方法
Nov 06 Python
java判断三位数的实例讲解
Jun 10 Python
python文件转为exe文件的方法及用法详解
Jul 08 Python
python+selenium 点击单选框-radio的实现方法
Sep 03 Python
如何基于Python获取图片的物理尺寸
Nov 25 Python
基于Python数据分析之pandas统计分析
Mar 03 Python
tensorflow模型的save与restore,及checkpoint中读取变量方式
May 26 Python
Python爬虫实现百度翻译功能过程详解
May 29 Python
python的json包位置及用法总结
Jun 21 Python
Python解析树及树的遍历
Feb 03 #Python
Python实现二叉堆
Feb 03 #Python
Python实现二叉搜索树
Feb 03 #Python
Python的组合模式与责任链模式编程示例
Feb 02 #Python
举例讲解Python中的Null模式与桥接模式编程
Feb 02 #Python
简介Python设计模式中的代理模式与模板方法模式编程
Feb 02 #Python
Python找出9个连续的空闲端口
Feb 01 #Python
You might like
关于PHP中Session文件过多的问题及session文件保存位置
2016/03/17 PHP
全面解读PHP的Yii框架中的日志功能
2016/03/17 PHP
总结的一些PHP开发中的tips(必看篇)
2017/03/24 PHP
PHP实现微信退款功能
2018/10/02 PHP
php5.6.x到php7.0.x特性小结
2019/08/17 PHP
用javascript获取textarea中的光标位置
2008/05/06 Javascript
jQuery chili图片远处放大插件
2009/11/30 Javascript
对采用动态原型方式无法展示继承机制得思考
2009/12/04 Javascript
jquery实现图片渐变切换兼容ie6/Chrome/Firefox
2013/08/02 Javascript
基于jquery插件编写countdown计时器
2016/06/12 Javascript
vue实现app页面切换动画效果实例
2017/05/23 Javascript
axios拦截设置和错误处理方法
2018/03/05 Javascript
微信小程序实现九宫格抽奖
2020/04/15 Javascript
详解es6新增数组方法简便了哪些操作
2019/05/09 Javascript
解决vue.js提交数组时出现数组下标的问题
2019/11/05 Javascript
JavaScript JSON使用原理及注意事项
2020/07/30 Javascript
在vs code 中如何创建一个自己的 Vue 模板代码
2020/11/10 Javascript
实例讲解Python中global语句下全局变量的值的修改
2016/06/16 Python
Python字典数据对象拆分的简单实现方法
2017/12/05 Python
python web框架 django wsgi原理解析
2019/08/20 Python
浅谈pytorch池化maxpool2D注意事项
2020/02/18 Python
Django model重写save方法及update踩坑详解
2020/07/27 Python
python操作redis数据库的三种方法
2020/09/10 Python
一款基于css3和jquery实现的动画显示弹出层按钮教程
2015/01/04 HTML / CSS
利用HTML5的新特点实现图片文件异步上传
2014/05/29 HTML / CSS
凯蒂·佩里个人女鞋品牌:Katy Perry Collections
2019/04/04 全球购物
Shell如何接收变量输入
2016/08/06 面试题
好的演讲稿开场白
2013/12/30 职场文书
通信生自我鉴定
2014/01/18 职场文书
阳光体育活动总结
2014/04/30 职场文书
大学生求职简历自我评价
2015/03/02 职场文书
2015年统战工作总结
2015/05/19 职场文书
2015年见习期个人工作总结
2015/05/28 职场文书
2016大学生入党积极分子心得体会
2016/01/06 职场文书
angular4实现带搜索的下拉框
2022/03/25 Javascript
python lambda 表达式形式分析
2022/04/03 Python