序列是python中最基本的数据结构。序列中的每个元素被分配一个序号即元素的位置,或者称为索引。
其中,第一个索引是0。python还可以从最后一个元素开始计数,最后一个元素标记为-1。所以第一个索引是0可以向前或者向后计数。
python包含6种内建的序列:列表、元组、字符串、unicode字符串、buffer对象和xrange对象。
这里主要介绍的是列表和元组。列表和元组的主要区别是:列表可以修改,元组不能。
所有序列类型都可以进行某些特定的操作,这些操作包括索引(indexing)、分片(slicing)、加(adding)、乘(multiplying)以及检查某个元素是否属于序列的成员(成员资格)等等。
序列中所有元素都是有编号的,从0开始递增。字符串就是一个由字符组成的序列。使用负数索引时,python会从右边,也就是从最后1个元素开始计数,最后1个元素的位置编号是-1。
字符串字面值或者其他字面量能够直接使用索引,不需要一个变量引用它们。例如:
>>> 'Hello'[2]
'e'
如果一个函数调用返回一个序列,那么也可以直接对返回结果进行索引操作,例如::
>>>fourth=raw_input('Year: ')[3]
Year: 2005
>>>fourth
'5'
索引可以访问单个元素,分片操作能够访问一定范围内的元素。
分片操作对于提取序列的一部分是很有用的。分片操作需要提供两个索引作为边界,第1个索引的元素是包含在分片内的,第2个不包含在分片内。
示例4:
>>>numbers=[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>>numbers[3:6]
[3,4,5]
如果要访问最后3个元素应该怎么做,首先可以进行显示的操作
>>>numbers[7,10] #索引10指向的元素并不存在,但仍然可行
[7,8,9]
如果我们想要从列表的结尾开始计数应该怎么做呢?
>>> numbers[-3:-1] #错误,输出[8, 9]
>>> numbers[-3:0] #错误,结果为空
#只要分片中最左边的索引比它右边的晚出现在序列中,
#结果就是空的序列
>>> numbers[-3:] #正确,输出结果[7,8,9]
这种情况也适用序列开始的元素
>>> numbers[:3] #输出[0,1,2]
实际上,如果要复制整个序列,可以将两个索引都置空
>>>numbers[:]
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
进行分片的时候,还有一个参数步长,默认步长为1,也可以显示指定步长的大小。
>>> numbers[0:9:2]
[0, 2, 4, 6, 8]
>>> numbers[::4]
[0,4,8]
#步长不能为0,但可以是负数,此时分片从右到左提取元素
>>> numbers[8:3:-1]
[8, 7, 6, 5, 4]
>>> numbers[::-2]
[9, 1, 3, 5, 7]
>>> numbers[5::-2]
[5, 3, 1]
>>> numbers[:5:-2]
[9, 7]
总结:
1. 开始点的元素包括在结果之中,而结束点的元素不在分片之内。
2. 当使用一个负数作为步长的时候,必须让开始点大于结束点。
3. 对于正数步长,python会从左往右提取元素;负数步长则是从右往左。
加运算符可以实现序列的连接。
>>> [1,2,3]+[4,5,6]
[1, 2, 3, 4, 5, 6]
>>> 'Hello,' + 'world!'
'Hello, world!'
注:两种相同类型的序列才能进行连接操作。字符串和序列无法连接到一起。
用数字x乘以一个序列会生成新的序列,新序列中原来的序列将被重复x次。
>>> 'python'*5
'pythonpythonpythonpythonpython'
空列表可以用[]表示,但是有时候我们需要一个值来代表空值,可以用None来表示,它表示“这里什么也没有“。如果想初始化一个长度为10的列表:
>>> sequence = [None]*10
>>> sequence
[None, None, None, None, None, None, None, None, None, None]
运算符in检查某个条件是否为真,条件为真返回True,条件为假返回False。
>>> permission = 'rw'
>>> 'r' in permission
True
>>> 'x' in permission
False
#上面两行代码可以用来查看文件是否有可写和可执行权限。
>>> users = ['Jack', 'Lucy', 'Mike']
>>> raw_input['Enter your user name:'] in users
Enter your user name: Jack
True
#检查输入的用户名是不是在用户名列表,可以用在一些安全策略中
>>> subject = '$$$ Get rich now !!! $$$'
>>> '$$$' in subject
True
#可以作为垃圾邮件过滤器的一部分,
#可以检查字符串subject是否包含'$$$'
len、min和max函数
>>> numbers=[100, 34, 687]
>>> len(numbers)
3
>>> max(numbers)
687
>>> min(numbers)
34
方法是一个与某些对象有紧密联系的函数,对象可能是列表、数字,也可能是字符串或者其他类型的对象,一般来说,方法可以这样调用:
对象.方法(参数)
元组与列表一样,也是一种序列,唯一的不同是元组不能修改。