CDA数据分析师出品一、序列1.1序列简介所谓序列,就是元素有序排列。序列中每个位置的元素都有其对应的唯一编号,也就是说,我们可以通过元素的位置标识来查找元素。python中有6种内置序列:列表、元组、字符串、Unicode字符串、xrange对象和缓冲区对象。其中,列表和元组是最常见的序列,应该掌握。字符串在上一篇文章中已经简单介绍过,下面将以字符串为例详细讲解序列的一般操作。1.2序列一般操作·索引·序列的索引就是上面介绍的序列中元素的位置标识。按识别顺序分为正升序号(简称正序)和逆降序号(简称逆序)。正序识别是从左到右,索引从0开始递增。索引0代表第一个元素,索引1代表第二个元素,以此类推。取变量x='HELLOWORLD!'举个例子:倒序标记是从右到左,索引从-1开始,索引-1表示倒序第一个元素,索引-2表示倒序第二个元素,依此类推在。以字符串“HELLOWORLD!”为例举个例子:根据字符串的索引,我们可以提取出对应位置的元素。例如,如果我们需要提取字符'R',我们可以使用正索引'x[8]'来提取它。您也可以使用反向索引即'x[-4]'来提取。·x='HELLOWORLD!'#正序抽取x[8]#逆序抽取x[-4]上面代码的执行结果为:·切片(slicing)·使用索引抽取序列元素确实不需要创建新的变量,非常方便,但是使用索引一次只能提取字符串中的单个字符,但实际中往往需要一次提取多个字符,那么序列的另一个特点可以使用:切片。切片是指通过序列的索引提取指定范围内的元素作为新的序列。语法:obj[startindex:endindex:step]obj:变量名start_index:[可选参数],切片的起始索引,默认为0(正序)或-1(反序)end_index:[可选参数],切片结束索引,默认为最后一个元素对应的索引(正序),或者第一个元素对应的索引(倒序)step:切片步长,默认为1注意:取值范围序列中slice的位置是left-closedOpenright,包含起始索引,不包含结束位置。·x='HELLOWORLD!'提取字符'LLO'x[2:5:1]#usepositiveindexx[-10:-7:1]#usenegativeindexx[2:5]#stepsizeis1参数step可以省略,提取字符'WRD'x[6:11:2]#使用正索引,步长为2x[-6:-1:2]#使用负索引,步长为2提取字符'LRO'x[-3:-6:-1]#使用负索引,逆序提取x[9:6:-1]#使用正索引,逆序提取,提取所有charactersinpositiveorderx[::]#可以接受三个参数,Omit以倒序提取所有字符x[::-1]#步长为-1,不能省略。注意:正序抽取时,起始索引要小于结束索引;返回值为空序列[]。·添加·序列中相同类型的序列可以相加,即可以将两个或多个序列拼接在一起。注意不是数值加法运算(元素为数字时容易混淆)。·x1='talkischeap'x2=','x3='showmethecode'print(x1+x2+x3)·上面代码的执行结果为:·Multiplication(乘法)·类似于数学中的乘法operations运算,将一个序列乘以一个正整数n,相当于将字符串重复n次,将其连接成一个新的序列。x='python'print(x*3)上面代码的执行结果为:元素存在判断使用python关键字“in”或“notin”来判断指定元素是否存在于序列中或不存在于序列中,如果满足条件,则返回True,如果不满足条件,则返回False。·x='python''t'inx'i'inx·上述代码执行结果为:·序列相关BIF·len():返回序列包含的元素个数·max():返回元素中的最大值·min():返回元素中的最小值·x='python'len(x)max(x)min(x)·当序列中元素的类型为字符串时类型,使用max()或min()会对字符串进行按位比较,即比较字符串中每个元素的ascii码,输出最大值或最小值。2.列表在对序列有了一个大概的了解之后,现在我们来介绍一下序列中最具代表性的数据类型——列表。python中的列表由方括号'[]'标识,将一个或多个元素(以逗号分隔)括在一个列表中,列表中的元素可以是python中的任何数据类型,包括列表本身,每个元素不需要相同数据类型。清单可以简单理解为我们日常生活中超市的日常购物记录,其中每个人的购物记录就是清单中的一个元素,每个人可以购买的商品种类不同,购买数量往往不一致。创建列表x_listx_list=[2333,'python',['a','b','c']]print(x_list)上面代码的执行结果为:除了介绍的序列一般操作在上面的1.2节中,列表中还有一些其他更常用的操作。2.1元素的更新2.1.1修改元素列表通过直接给元素的索引位置赋新值来修改元素。语法:变量名[待修改元素的索引]=新值将变量x_list中索引为0的元素修改为2222x_list[0]=2222print(x_list)上述代码的执行结果为:2.1.2删除列表元素通过元素索引位置,使用del语句删除列表元素。dellistname[待删除元素列表]删除变量x_list索引为1的元素delx_list[1]print(x_list)上面代码的执行结果为:2.2常用方法2.2.1添加元素Append():在列表的末尾添加一个新元素语法:listname.append(addedelement)#在列表的末尾添加元素'MySQL'x_listx_list.append('MySQL')print(x_list)上面的结果代码执行是:注意:如果添加的新元素是一个列表,append()会保存它的列表形式,并添加到末尾。#在列表末尾添加元素x_list['MySQL','SPSS']x_list=[2333,'python',['a','b','c']]x_list.append(['MySQL','SPSS'])print(x_list)上面代码的执行结果为:extend():addmultipleiteminanewlistattheendofthelist元素语法:listname.extend(addedlist)与方法不同append(),extend()中添加的元素只能是列表类型,其列表形式不保存,即待添加列表中的元素是一个提取出来的,添加到原列表中。x_list=[2333,'python',['a','b','c']]x_list.extend(['MySQL','SPSS'])print(x_list)以上代码执行结果为:·insert():根据指定索引插入一个新元素·语法:列表名.insert(插入位置的索引,插入的元素)·#在变量索引为1'MySQL'的位置插入元素x_list=[2333,'python',['a','b','c']]x_list.insert(1,'MySQL')print(x_list)上面代码的执行结果为:2.2.2删除元素Pop():删除指定索引对应的元素(默认为-1),并返回删除后的值语法:listname.pop(indexvalue)#删除变量中索引为1的元素x_list=[2333,'python',['a','b','c']]x_list.pop(1)print(x_list)上面代码的执行结果为:remove():删除指定元素,如果有多个匹配是找到,只删除第一个匹配到的元素ItemSyntax:listname.remove('Elementtobedeleted')#删除指定元素'a',只删除delete第一个匹配项z_list=['a','b','c','a']z_list.remove('a')print(z_list)上面代码的执行结果为:clear():清除列表中的所有元素并返回一个空列表语法:listname.clear()#清除变量x_listx_list的所有元素=[2333,'python',['a','b','c']]x_list.clear()print(x_list)上面代码的执行结果为:2.2.3元素搜索索引():查找元素第一次出现对应的正索引语法:listname.index(searchelement,startindex,endindex)#找到元素'python'在变量x_list中第一个搜索位置的索引x_list=[2333,'python',['a','b','c']]x_list.index('python')以上代码执行结果为:注意:如果查找到的元素不在列表中,会报错。count():求元素在列表中出现的次数语法:listname.count(searchedelement)#求元素‘python’在变量x_list中出现的次数y_list=[2,3,4,5,2,2,3]y_list.count(2)·以上代码执行结果为:·注意:列表中没有find()方法。2.2.4元素排序sort():对列表元素进行排序,返回列表元素升序(默认)或降序语法:listname.sort(reverse=True/False)reverse:可选参数,默认为True,表示升序,如果为False,表示降序#将变量y_list的元素按降序排列y_list=[2,3,4,5,2,2,3]y_list.sort(reverse=True)print(y_list)·上面代码的执行结果为:·reverser():将list中的元素倒序排列·语法:listname.reverser()·#将y_list的元素倒序排列y_list=[2,3,4,5,2,2,3]y_list.reverser()print(y_list)上面代码的执行结果为:2.2.5列表的复制Copy():用于复制列表用法:listname.copy()y_list=[2,3,4,5,2,2,3]y=y_list.copy()print(y)上面代码执行结果为:注意区分赋值,浅拷贝()和深拷贝deepcopy():赋值:ob的简单性ject引用浅拷贝:拷贝列表的父对象,不拷贝对象内部的子对象深拷贝:拷贝列表的父对象和子对象,需要引入拷贝模块2.3常用内置函数除了序列常用的内置函数:len()、max()、len(),列表还包含以下内置函数:list():将其他类型转换为列表zip():组合对应位置的多个列表或元组(后述)的元素为祖先,并返回zip对象对序列的所有常见操作都可用。元组在python中用括号“()”标识,将一个或多个元素(以逗号分隔)围成一个元组,其用法与列表非常相似,两者的主要区别在于列表中的元素可以被修改,元组中的元素不能被修改,元组可以简单理解为列表的“可读版本”。元组的创建x_tuple=('a',2,[3,4])print(x_tuple)#修改元素会报错x_tuple[1]=3上面代码的执行结果为:注意:创建元组时只有一个元素,你需要在它后面跟一个逗号,否则将返回元素本身。因为括号“()”也是python中数学运算中的基本符号,比如(1+1)^2,如果不加逗号分隔只有一个元素的元组,python解释器会识别括号作为数学运算的符号。y_tuple=(2333,)print(y_tuple)z_tuple=(2333,)print(z_tuple)上面代码的执行结果为:3.2常用方法和内置函数3.2.1常用方法由于元组元素的不可变性,元组不能添加元素,删除,排序和复制操作,元组中元素的查找与上面列表中的用法一致。x_tuple=('a',2,[3,4])#元素查找x_tuple.index('a')#元素复制x_tuple.count(2)上面代码执行结果为:注:元祖时当包含元素是列表(可变序列)时,列表的嵌套项是可变的。x_tuple=('a',2,[3,4])#修改列表[3,4]中的元素,tuple也会'改变'x_tuple2=3print(x_tuple)上面代码的执行结果为:3.2.2常用内置函数len(tuple):返回元组元素的个数max(tuple):返回元组元素的最大值min(tuple):返回元组元素的最小值tuple(seq):将序列转换为元组3.2.3选择元组或列表特点:列表:动态存储,变长,元素可增删改查,但存储内存大,性能偏差;元组:静态存储,定长,不能随意更新数据,内存占用小,处理速度快;使用场景:列表:需要随时更改数据,与性能无关;元祖:1、数据需要“锁定”,不能随意更改;2.对性能有影响的需求,比如遍历;3.作为数据结构的一部分,比如字典的key获取更多优质内容,可以去:目前疫情,节奏慢了,也是提升的好时机为自己积蓄能量,为未来蓄势发发!
