# 2.1 序列概览
Python包含6种内建的序列:列表、元组、字符串、Unicode字符串、buffer对象和 xrange对象。
容器:序列,映射和集合(set)。
# 2.2 通用序列操作
索引(indexing)、分片(sliceing)、加(adding)、乘(multiplying)、检查某个元素是否属于序列的成员(成员资格)、计算序列长度、找出最大元素和最小元素的内建函数。
## 2.2.1 索引
![](https://box.kancloud.cn/3755eedae22a751c5f02380aa05b2b27_134x26.png)
![](https://box.kancloud.cn/18bb4e29e5cc63f0b3f097a33f983012_327x152.png)
## 2.2.2 分片
1.优雅的捷径
分片操作的实现需要提供两个索引作为边界,第一个索引的元素是包含在分片内,而第2个则不包含在分片内。
取得前三个元素:[:3]
取得后三个元素:[-3:]
2.更大的步长
[::length]
## 2.2.3 序列相加
通过加号可以进行序列的连接操作。注意:要类型相同的序列才能进行连接操作。
![](https://box.kancloud.cn/2ff8a2cb0d42451c40b6607bead2382c_463x83.png)
## 2.2.4 乘法
用数字 * 乘以一个序列会生成新的序列,而在新序列中,原来的序列将被重复 n 次。
![](https://box.kancloud.cn/bbfea39dd1364b743fbc0c14658977f0_658x98.png)
// 整除 得到一个整数
## 2.25 成员资格
in
## 2.26 长度、最小值和最大值
max()
min()
len()
# 2.3 列表:Python的“苦力”
列表不同于元组和字符串的地方:列表是可变的(mutable)--可以改变列表的内容,并且列表有很多有用的、专门的方法。
## 2.3.1 list函数
![](https://box.kancloud.cn/9cbb02f2fc1896d64e56657a5dc73bfd_469x83.png)
## 2.3.2 基本的列表操作
1.改变列表:元素赋值
2.删除元素
del name[2]
3.分片赋值
name[2:] = list('ar')
## 2.2.3 列表方法
对象.方法(参数)
1.append
append方法用于在列表末尾追加新的对象
![](https://box.kancloud.cn/20a1e4647e26348525274e3d824a2d37_167x63.png)
2.count
count方法统计某个元素在列表中出现的次数:
![](https://box.kancloud.cn/979f852d21c136ffc346f341400fa978_450x98.png)
3.extend
extend方法可以在列表的末尾一次性追加另外一个序列中的多个值。
![](image/screenshot_1490774030783.png)
extend与 + 的区别
4.index
index方法用于从列表中找出某个值第一个匹配项的索引位置。
![](https://box.kancloud.cn/e3c24c0747b057895d47921ebccbca9b_514x101.png)
防止报错,应该先判断是否存在该项。
5.insert
insert方法用于将对象插入到列表中。
![](https://box.kancloud.cn/56ef83cb47c22409394c94f76294f772_272x55.png)
也可以用分片赋值来实现。
6.pop
pop方法会移除列表中的一个元素(默认是最后一个),并且返回该元素的值。
![](https://box.kancloud.cn/a0a7269b11603f84166d932f0ea43653_218x174.png)
pop方法是唯一一个既能修改列表又返回元素值(坠子None)的列表方法。
使用pop方法可以实现一种常见的数据结构--栈(LIFO,后进先出)。
7.remove
remove方法用于移除列表中某个值的第一个匹配项
![](https://box.kancloud.cn/1481b5b37f8ca68689c87f96397dce73_380x111.png)
如果移除项不存在,会报错,这里要注意了。
8.reverse
reverse方法将列表中的元素反向存放。
![](https://box.kancloud.cn/e636fea3b2843dd912ccc42abc1faf7b_394x150.png)
9.sort
sort方法用于在原位置对列表进行排序。
![](https://box.kancloud.cn/ca420103decf5ea3fca63548f8d5745c_248x137.png)
x.sort(),对原来序列进行排序,不返回值;sorted(x),不改变原来序列,返回一个排序后的新序列。
10.高级排序
![](https://box.kancloud.cn/3b4ba2c9021944f5d70f57a50ea35196_444x292.png)
sort 的可选参数:cmp(默认),key,reverse
# 2.4 元组:不可变序列
元组与列表一样,也是一种序列。唯一不同是元组不能修改。
![](https://box.kancloud.cn/12a84e9884a2ca678a71d9ada69ea342_145x211.png)
元组的创建方法。
## 2.4.1 tuple函数
tuple 函数的功能与 list 函数基本上是一样的:以一个序列作为参数并把它转换为元组。
![](https://box.kancloud.cn/e2f322647d7659fe7a99aa30f7772ac7_191x83.png)
## 2.4.2 基本元组操作
元组其实并不复杂--除了创建元组和访问元组元素之外,也没有太多其他操作,可以参照其他类型的序列来实现。
![](https://box.kancloud.cn/3da1fdc44d1435bb108011dc31b25774_137x70.png)
## 2.4.3 那么,意义何在
元组是不可替代的:
元组可以在映射(和集合的成员)中当作键使用--而列表则不行。
元组作为很多内建函数和方法的返回值存在,也就是说你必须对元组进行处理。只要不尝试修改元组,那么,“处理”元组在绝大多数情况下就是把它们当作列表来进行操作(除非需要使用一些元组没有的方法,例如index和count)
# 2.5 小结
新函数:
cmp(x,y): 比较两个值
len(seq): 返回序列的升序
list(seq): 把序列转换成列表
max(args): 返回序列或者参数集合中的最大值
min(args): 返回序列或都参数集合中的最小值
reversed(seq): 对序列进行反射迭代
sorted(seq): 返回已排序的包含seq所有元素的列表
tuple(seq): 把序列转换成元组