2.列表和元组
2.1序列
分为列表, 元组,字符串,Unicode字符串,buffer对象,以及xrange对象
2.2序列通用操作
2.2.1索引(Indexing)
和其他语言一样,当index为正数时,例如
edward=['Edward Gumby', 42]
edward[1]会是序列中的第二个元素(42)
不同点是当index为负数时,例如-1,索引的元素将是倒数第一个element(edward[-1]=42)
2.2.2分片(slicing)
第一个index表示分片开始的index(包括),第二个index为结束的index(不包括)
两个index可以为空,第一个index为空则表示从序列的第一个element开始分片,第二个index为空表示分片后的array将结束于原序列的结尾。
步长(分片的第三个参数,不设置是为1)的概念
步长为2是,将提取每隔1个的元素
每隔四个元素,提前第一个
步长可以为负数。 当步长为负数时,将从右往左提前元素。当前两个index不为空,第一个index必须比第二个index大。
2.2.3序列相加
只有相同类型的序列才能通过加号连接
2.2.4乘法
用序列*数字x将形成一个重复x次的新的序列
None,空表格和初始化
None是python中的一个內建值,表示里面什么都没有。可以用来初始化空的表格
初始化1个长度为10的列表:
2.2.5成员资格
检查一个值是否在序列里,可以使用in运算符。返回值为true或者false。
2.2.6长度,最小值和最大值
长度(len),最小值(min)和最大值(max)
2.3列表(list)
列表是可变的(可以改变内容),不同于元组和字符串。
2.3.1list函数
可以将任何类型的序列转化为列表(下面是是将字符串转化为list)
2.3.2list的基本操作
1.元素赋值
2.删除元素(del)
删除之后序列的长度也会减少
3.分片赋值
可用来添加/修改序列
和删除序列
2.3.3列表方法
很多列表方法都可以以分片操作来实现相同效果,但是分片的话效率有可能更低。即使效率一样,仍然应该用列表方法,因为可读性更好。
1.append(element):将element加到list末尾。
2.count(element):计算element出现的次数。
3.extend(列表):用新列表扩展原来的列表。
append和extend区别:append只能添加一个element,extend添加多个。
4.index(element):找出element第一次出现的index,没有找到将引发异常。
5.insert(index, element):将element插入到index的地方。
6.pop(index):移除列表索引为index的element,index为空时,移除最后一个element(默认)。返回值为移除的element。
7.remove(element):移除第一次出现的element。没有element的话则报错。无返回值。
8.reverse():将列表元素反向存放。
9.sort():将原列表进行原位置的排序。直接改变原列表,不返回任何值。千万不要用b=a.sort()来得出sort后的序列。可以用b=sorted(a)。
想得出由大到小的sort,可以先sort再reverse。或者
10.高级排序:
sort中有两个参数,一个是key,一个是上面提到的reverse。
reverse声明是否反向排序,以key声明的属性为排序的方式,例如len:
cmp和operator:cmp和operator都相当于java里的comparator,可以自己定义排序的方式。cmp在python3.4版本后就不在被支持,需要用operator,同时需要import operator。
第六章将讲述如何定义。
2.4元组:不可变序列(不能修改)
用逗号分隔一些值,就创建了元组。用圆括号括起来(有时可以不用但是推荐用)。
假如元组只有一个值,那么必须在后面加一个逗号。
2.4.1tuple
和list类似, tuple以序列作为参数,并将它转为元组。
2.4.2元祖的操作和意义
因为元组不能修改,除了创建元组和访问元素之外,并没有太多其他操作。
一般列表更容易满足对序列的需求,元组可以在映射中当做key来使用(列表则不行),也是很多內建函数和方法的返回值。