数据结构:更好的说法是从数据角度来说,结构化数据,就是说数据并不是随便摆放的,而是有一定结构的,这种特别的结构会带来某些算法上的性能优势,比如排序、查找等。
在Python中,最基本的数据结构是序列(sequence)。序列中的每个元素被分配一个序号————即元素的位置,这个序号也被称为索引。第一个索引从0开始。
本章先介绍序列,然后介绍针对序列(包括元组和列表)都通用的操作,这些操作也适用于字符串。
Python包含6种内建的序列,本章重点讨论最常用的两种类型:列表和元组。其他的内建序列类型有字符串、Unicode字符串、buffer对象和xrange对象。
列表和元组的主要区别在于,列表可以修改,元组不能。一般来说,在几乎所有的情况下列表都可以替代元组。不过需要注意的是:使用元组作为字典的键,这种情况下,键不可以改,所以不能使用列表。
在需要操作一组数组的时候,序列很好用,可以用序列表示数据库中一个人的信息————第1个元素是姓名,第二个是年龄,根据上述内容编写一个列表,如下所示:
>>> ed = ['Edward',23] >>> ed ['Edward', 23]
ed相当于一个记录,可以将记录房子更大的一个包中。
>>> john = ['John',24] >>> database=[ed,john] >>> database [['Edward', 23], ['John', 24]]
上面的database是一种容器。Python之中还有一种名为容器的数据结构。容器基本是包含其他对象的任意对象。序列(例如列表和元组)和映射(例如字典)是两类主要容器。序列中的每个元素都有自己的编号,而映射中的每个元素则有一个名字(也称为键)。
2 通用序列操作
所有序列类型都可以进行某些特定的操作,这些操作包括:索引、分片、加、乘以及检查某个元素是否属于序列的成员,除此之外,Python还有计算序列长度、找出最大元素和最小元素的内建函数。
另外还有一个重要操作:迭代。对序列进行迭代的意思是:依次对序列中的每个元素重复执行某些操作。
2.1 索引
序列中的所有元素都是有编号的————从0开始,这些元素可以通过编号分别访问。并且Python是允许从末尾开始访问数据的,也就是把-1当作倒数第一个,把-2当作第二个
示例1:正向索引第一个元素
>>> greet = 'hello' >>> greet[0] 'h'
示例2:反向索引第一个元素
>>> greet = 'hello' >>> greet[-1] 'o'
示例3:通过字符串值直接使用索引
>>> 'hello'[-2] 'l'
示例4:如果一个函数调用返回一个序列,那么可以直接对返回结果进行索引操作。例如,假设你只对用户输入年份的第4个数字感兴趣,那么可以如下操作:
>>> fourth = raw_input("Year:")[3] Year:2013 >>> fourth '3'
分析:raw_input返回的是一个字符串序列,输入的是2013,再进行索引4号元素,即3
代码示例:
下面是一个示例程序,它要求输入年、月、日,然后按照如下格式打印:August 16th.1974
View Code
2.2 分片
与使用索引来访问单个元素类似,可以使用分片操作来访问一定范围内的元素。分片通过冒号相隔的两个索引来实现:
tag = 'http://www.cnblogs.com/people/p/3230193.html' >>> tag[7:22] 'www.cnblogs.com'