二. 列表和元组
1. 有六种内建序列:列表、元组、字符串、Unicode字符串、buffer对象和xrange对象。
2. 列表可以修改,元组不可以。一般可用列表代替元组,除了用作字典的键。列表用[]标识。
3. 通用的序列操作包括:索引、分片、加、乘、包含某序列。
4. 序列的正序号从0开始向右,负序号从-1开始向左。
>>> x
[4, 2, 'ab', [2, 3, 'bc']]
>>> x[3]
[2, 3, 'bc']
>>> x[-1]
[2, 3, 'bc']
5. 分片通过两个索引和一个可选步长实现:a[first, last, step],first为空则从头开始,last为空则到尾结束。若first>last,那么步长必须为负。
>>> x[1:3]
[2, 'ab']
>>> x[0:3:2]
[4, 'ab']
>>> x[-1:0]
[]
>>> x[-1:0:-1]
[[2, 3, 'bc'], 'ab', 2]
6. '+'可以连接两个相同类型的序列。'*'可以用乘法生成序列。空值用None表示。
>>> [1, 2] + [3, 4]
[1, 2, 3, 4]
>>> [1, 2] * 5
[1, 2, 1, 2, 1, 2, 1, 2, 1, 2]
>>> [1, 2] * 3 + [3, 4] * 2
[1, 2, 1, 2, 1, 2, 3, 4, 3, 4]
7. in运算符检查值是否在序列中。len函数返回序列长度。max和min函数返回最大和最小元素,但需要序列中的元素之间都可进行比较。
8. list可以用任何序列创建一个列表。删除元素用del a[2]实现。分片赋值时左右两边可以不等长,如果左边分片为空,相当于插入一个序列,如果右边分片为空相当于删除。
>>> del x[-1]
>>> x
[4, 2, 'ab']
>>> x[1:2] = [3, 5, 7]
>>> x
[4, 3, 5, 7, 'ab']
>>> x[0:0] = [9]
>>> x
[9, 4, 3, 5, 7, 'ab']
>>> x[1:3] = []
>>> x
[9, 5, 7, 'ab']
9. 列表的方法:
1) append:在列表尾追加新元素,直接修改列表。lst.append(4)。
2) count:统计某元素出现的次数。lst.count([1,2])。
3) extend:在列表尾追加序列。与'+'的区别是extend修改了原序列。
4) index:找出某个值第一个匹配项的索引。
5) insert:插入指定位置。lst.insert(3, 'abc')。
6) pop:移除列表中的一个元素(默认最后一个),并返回该元素的值。
>>> x.pop(1)
5
>>> x.pop()
'ab'
>>> x
[9, 7]
7) remove:移除列表中某个值的第一个匹配项。改变了列表但没有返回值。
8) reverse:将列表中的元素反向存放。改变了列表但没有返回值。用reversed函数能获得一个列表的反向迭代器,可以再配合list获得一个新的反向的列表。
9) sort:原地排序,改变了列表但不返回值。可用sorted函数获得一个排序好的新列表。sort的第一个可选参数是cmp,自定义的排序规则;第二个可选参数是key,确定键值的规则;第三个可选参数是reverse,是个布尔值,指明是否要反向排序。
>>> x
[[1, 2], [2, 4, 6], [0], [1, 3, 5, 7]]
>>> x.sort(reverse = True, key = len)
>>> x
[[1, 3, 5, 7], [2, 4, 6], [1, 2], [0]]
10. 用逗号隔开一组值就能创建一个元组,也可用tuple创建。元组用()标识。元组可以在映射中当作键,而列表不行。元组还作为很多内建函数和方法的返回值存在。