通用序列操作
索引
序列中的元素从0开始,从左到右依自然顺序编号。这里的编号就是索引,可通过索引获取元素。所有序列都可以通过这种方式进行索引。Python的序列也可从右往左索引。
进行字符串的索引时可以定义变量也可以不定义变量。
如果函数返回一个序列,也可以直接对函数的返回结果进行索引操作。
分片
索引用来对单个元素进行访问,使用分片可以对一定范围内的元素进行访问,分片通过冒号相隔的两个索引实现。
由此看出,分片操作既支持正数索引也支持负数索引。分片操作的实现需要提供两个索引作为边界,第一个索引的元素包含在分片内,第二个索引的元素不包含在分片内。需要注意的是,只要在分片中最左边的索引比它右边的索引晚出现在序列中,结果就是一个空序列。通过负数索引取得最后一个元素有一个捷径可以使用:
正数索引也有类似操作
进行分片时,分片的开始和结束点都需要指定(无论是直接还是间接),用这种方式取连续的元素没有问题,但若要取序列中不连续的元素就比较麻烦,或不能直接操作。如取序列number中的所有奇数,以一个序列展示出来,用前面的方法并不能实现。
对于上述类似情况,python为我们提供了另一个参数——步长。在普通分片中,步长为1。
步长不能设置为0,但步长可为负数。
对于正数步长,python会从序列的头部开始向右提取元素,直到最后一个元素;对于负数步长,则是从序列的尾部开始向左提取元素,直到第一个元素。正数步长必须让开始点小于结束点,而负数步长必须让开始点大于结束点。使用负数步长时,设置第二个索引为空才能取到序列的第一个元素。
序列相加
类型相同的序列可以通过加号进行序列连接操作,不同类型的序列不能通过加号进行序列连接操作。
乘法
如果要初始化一个长度为x的序列,就要让每个编码位置都是空值,此时需要一个值代表空值,即里面没有任何元素,可以用None。None是Python的内建值,确切含义是“这里什么也没有”。
成员资格
为了检查一个值是否在序列中,Python为我们提供了in运算符。in运算符用于检验某个条件是否为真,并返回检验结果,检验结果为真返回True,结果为假返回False。这种运算符成为布尔运算符。
长度,最小值和最大值
列表
更新列表
1.元素赋值
由上述输出结果可以得知,可以对一个列表中的元素赋不同类型的值。但对列表赋值时使用的编号不能超过列表中的最大编号。
2.增加元素
可以往数字序列中添加字符串,也可以往字符串序列中添加数字。
3.删除元素
可以使用del删除列表中的元素。使用del除了可以删除列表中的字符,也可以删除列表中的数字。
4.分片赋值
上述示例中引入了一个新函数——list()函数。list()函数可以直接将字符串转换为列表。该函数的一个功能就是根据字符串创建列表,有时这么操作会很方便。list()函数适用于所有类型的序列。
分片赋值可以使用与原序列不等长的序列将分片替换。
append()方法只能在列表尾部添加元素,而分片赋值可以在任何位置增加元素。也可以通过分片赋值删除元素。
嵌套列表
在列表中可以嵌套列表,嵌套的列表取出后还是列表。
列表方法
1.append
使用方法为:
list.append(obj)
2.count
count()方法用于统计某个元素在列表中出现的次数。
count()方法的语法如下:
list.count(obj)
使用该方法的示例如下:
3.extend
extend()方法用于在列表末尾一次性追加另一个序列中的多个值(用新列表扩展原来的列表)。
extend()方法的语法如下:
list.extend(seq)
list代表列表,seq代表元素列表。
extend()方法和序列相加的主要区别是:extend()方法修改了被扩展的序列;原始的连接操作会返回一个全新的列表但不会修改原始的变量。
4.index
index()方法用于从列表中找出某个值第一个匹配项的索引位置。
index()方法的语法如下:
list.index(obj)
对于不在列表中的元素,用index()方法操作时会报错。
5.insert
insert()方法用于将对象插入列表。insert()方法的语法如下:
list.insert(index,obj)
list代表列表,index代表对象obj需要插入的索引位置,obj代表要插入列表中的对象。
与extend()方法一样,insert()方法的操作也可以使用分片赋值。
6.pop
pop()方法用于移除列表中的一个元素(默认最后一个元素),并返回该元素的值。pop()方法的语法如下:
list.pop(obj=list[-1])
此语法中list代表列表,obj为可选择的参数,代表要移除列表元素的对象。
pop()方法是唯一一个既能修改列表又能返回元素值(除了None)的列表方法。
使用pop()方法可以实现一种常见的数据结构——栈。
栈的原理成为LIFO,即后进先出。
7.remove
remove()方法用于移除列表中某个值的第一个匹配项。
remove()方法的语法如下:
list.remove(obj)
remove()方法是一个没有返回值的原位置元素变更方法。
8.reverse
reverse()方法用于反向列表中的元素。reverse()方法的语法如下:
list.reverse()
9.sort
sort()方法用于对原列表进行排序,如果指定参数,就使用参数的比较方法进行排序。语法如下:
list.sort(func)
若不将原列表分片后赋值给另一个变量,则两个列表都会被排序,这样简单的赋值后,两个列表都指向同一个列表。进行该操作时要记得对原列表分片。
sort方法有一个同样功能的函数——sorted函数。该函数可以直接获取列表的副本进行排序,使用方法如下:
10.clear
clear()方法用于清空列表,类似于del a[:]。clear()方法的语法如下:
list.clear()
11.copy
copy()方法用于复制列表,类似于a[:]。copy()方法的语法如下:
list.copy()
示例如下:
12.高级排序
若希望元素能按特定方式进行排序,可以自定义比较方法。sort方法有两个可选参数,即key和reverse。使用它们前要通过名字指定,称之为关键字参数。示例如下:
元组
元组与列表类似,不同之处在于元组的元素不能修改。
tuple函数
tuple函数的功能与list函数基本上一样,都是以一个序列作为参数,并把它们转换为元组。如果参数是元组,参数就会被原样返回。
元组的基本操作
1.访问元组
2.修改元组
元组中的元素值不允许修改,但可以对元组进行连接组合。
3.删除元组
元组中的元素不允许删除,但可以使用del语句删除整个元组。
4.元组索引、截取
元素内置函数
len(tuple)用于计算元组元素个数
max(tuple)用于返回元组中元素的最大值
min(tuple)用于返回元组中元素的最小值
tuple(tuple)用于将列表转换为元组
列表与元组的区别
列表与元组的区别在于元组的元素不能修改,因为不可变,所以代码更加安全。如果可能,能用元组代替列表就尽量用元组
嵌套列表
表面上来看,元组的元素确实发生了改变,但事实上变得不是元组的元素,而是列表的元素。元组一开始指向的列表并没有改成别的列表,但指向的列表本身是可变的。