Python数据类型串讲(中)

CDA数据分析师 出品

1、序列

1.1 序列简介

所谓序列,即元素的有序排列。序列中每个位置的元素都有其对应的唯一编号,也就是说我们可以通过元素的位置标识,去搜索到该元素。python中的内建序列有6种:列表、元祖、字符串、Unicode字符串、xrange对象、buffer对象,其中列表和元祖是最常见的序列,应重点掌握。字符串在上一篇文章中已简单介绍,下面将以字符串为例,对序列的通用操作进行详讲。

1.2 序列通用操作

· 索引(indexing)

· 序列的索引即上文介绍的序列中元素的位置标识,按标识顺序分为正向递增序号(简称正序)和逆向递减序号(简称逆序)。正序标识即由左往右,索引从0开始递增,索引为0表示第一个元素,索引为1表示第二个元素,以此类推。以变量x='HELLO WORLD!'为例:

Python数据类型串讲(中)

· 逆序标识即由右往左,索引从-1开始,索引为-1表示逆序第一个元素,索引为-2表示逆序第二个元素,以此类推。以字符串’HELLO WORLD!'为例:

Python数据类型串讲(中)

· 根据字符串的索引,我们可以提取出对应位置上的元素,例如需要提取字符’R’,可以使用正索引即’x[8]'去提取,也可以使用逆索引即’x[-4]'去提取。

· x=‘HELLO WORLD!’#正序提取x[8]#逆序提取x[-4]

· 以上代码执行结果为:

Python数据类型串讲(中)

· 切片(sliceing)

· 使用索引提取序列元素不需要新创建变量,非常方便,但使用索引每次只能提取字符串中的单个字符,而实际运用中往往需要一次提取多个字符,这时便可以使用序列的另一特性:切片。切片是指通过序列的索引提取出指定范围内的元素作为新的序列。

· 语法:obj [startindex:endindex:step]

· obj:变量名

· start_index:[可选参数],切片起始索引,默认为0(正序)或-1(逆序)

· end_index:[可选参数],切片结束索引,默认为最后一个元素对应索引(正序),或第一个元素对应索引(逆序)

· step:切片步长,默认为1

· 注意:序列中切片取值范围为左闭右开,即包含起始索引,不包含结束位置。

· x=‘HELLO WORLD!’

############ 提取字符’LLO’###########

x[2:5:1] #使用正索引

x[-10:-7:1] #使用负索引

x[2:5] #步长为1时可省略参数step

############ 提取字符’WRD’###########

x[6:11:2] #使用正索引,步长为2

x[-6????2] #使用负索引,步长为2

############ 提取字符’LRO’###########

x[-3:-6:-1] #使用负索引,逆序提取

x[9:6:-1] #使用正索引,逆序提取

############ 正序提取所有字符 ##########

x[::] #三个参数皆可省略

############ 逆序提取所有字符 ##########

x[::-1] #步长为-1,不可省略

· 注意:正序提取时,起始索引应小于结束索引;逆序提取时,起始索引应大于结束索引,否则返回值为空序列 []。

· 相加(adding)

· 序列中类型相同的序列可以进行加法操作,即把两个或多个序列拼接起来,注意不是数值上的加法运算(元素为数字型时容易混淆)。

· x1=‘talk is cheap’x2=’,'x3='show me the code’print(x1+x2+x3)

· 以上代码执行结果为:

Python数据类型串讲(中)

· 相乘(multiplying)

· 类似于数学运算上的乘法运算,一个序列乘上一个正整数n,相当于将该字符串重复n次连接成一个新序列。

· x='python 'print(x*3)

· 以上代码执行结果为:

Python数据类型串讲(中)

· 元素存在判断

· 使用python的关键字"in"或"not in",可以判断指定元素是否存在该序列中或是否不存在该序列中,满足条件则返回True ,不满足条件则返回False 。

· x='python ‘‘t’ in x’i’ in x

· 以上代码执行结果为:

Python数据类型串讲(中)

· 序列相关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)

以上代码执行的结果为:

Python数据类型串讲(中)

除了上面1.2节介绍的序列通用操作外,列表还有其他一些比较常用的操作。

2.1 元素的更新

2.1.1 元素的修改

列表通过直接对元素的索引位置赋新值来修改元素。

语法:变量名[需修改元素的索引]=新值

#将变量x_list索引为0的元素修改为2222x_list[0]=2222print(x_list)

以上代码执行结果为:

Python数据类型串讲(中)

2.1.2 元素的删除

列表通过对元素的索引位置,使用del语句来删除列表的元素。

del 列表名[需删除元素的列表]

#删除变量x_list索引为1的元素del x_list[1]print(x_list)

以上代码执行结果为:

Python数据类型串讲(中)

2.2 常用方法

2.2.1 元素的增加

· append():在列表最后添加一个新的元素

· 语法:列表名.append(添加的元素)

· #在列表x_list最后添加元素’MySQL’x_list.append(‘MySQL’)print(x_list)

· 以上代码执行结果为:

Python数据类型串讲(中)

· 注意:若添加的新元素为列表,append()会保存其列表形式添加到最后

· #在列表x_list最后添加元素[‘MySQL’,‘SPSS’]x_list=[2333,‘python’,[‘a’,‘b’,‘c’]]x_list.append([‘MySQL’,‘SPSS’])print(x_list)

· 以上代码执行结果为:

Python数据类型串讲(中)

· extend():在列表最后添加一个新列表内的多个元素

· 语法:列表名.extend(添加的列表)

· 与方法append()不同,extend()中添加的元素只能是列表类型,且不保存其列表形式,即将需要添加的列表里的元素一一提取出来后再添加到原列表。

· x_list=[2333,‘python’,[‘a’,‘b’,‘c’]]x_list.extend([‘MySQL’,‘SPSS’])print(x_list)

· 以上代码执行的结果为:

Python数据类型串讲(中)

· insert():根据指定索引插入新的元素

· 语法:列表名.insert(插入位置的索引,插入的元素)

· #在变量索引为1的位置插入元素’MySQL’x_list=[2333,‘python’,[‘a’,‘b’,‘c’]]x_list.insert(1,‘MySQL’)print(x_list)

· 以上代码执行结果为:

Python数据类型串讲(中)

2.2.2 元素的删除

· pop():删除指定索引(默认为-1)对应的元素,并返回所删除的值

· 语法:列表名.pop(索引值)

· #删除变量中索引为1的元素x_list=[2333,‘python’,[‘a’,‘b’,‘c’]]x_list.pop(1)print(x_list)

· 以上代码执行结果为:

Python数据类型串讲(中)

· remove():删除指定元素,若匹配到多项,仅删除匹配到的第一项

· 语法:列表名.remove(‘需删除的元素’)

· #删除指定元素’a’,仅删除匹配到的第一项z_list=[‘a’,‘b’,‘c’,‘a’]z_list.remove(‘a’)print(z_list)

· 以上代码执行结果为:

Python数据类型串讲(中)

· clear():清空列表里所有元素,返回一个空列表

· 语法:列表名.clear()

· #清空变量x_list的所有元素x_list=[2333,‘python’,[‘a’,‘b’,‘c’]]x_list.clear()print(x_list)

· 以上代码执行结果为:

Python数据类型串讲(中)

2.2.3 元素的查找

· index():查找元素首次出现位置对应的正索引

· 语法:列表名.index(查找的元素,起始索引,结束索引)

· #查找元素’python’在变量x_list中首次查找到位置的索引x_list=[2333,‘python’,[‘a’,‘b’,‘c’]]x_list.index(‘python’)

· 以上代码执行的结果为:

Python数据类型串讲(中)

· 注意:若查找的元素不在该列表中会报错误提示。

· count():查找元素在该列表中出现的次数

· 语法:列表名.count(查找的元素)

· #查找元素’python’在变量x_list中出现的次数y_list=[2,3,4,5,2,2,3]y_list.count(2)

· 以上代码执行结果为:

· 注意:列表中没有方法find()。

2.2.4 元素的排序

· sort():对列表元素进行排序,返回元素按升序(默认)或降序排列的列表

· 语法:列表名.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)

· 以上代码执行结果为:

Python数据类型串讲(中)

· reverser():将列表内元素按逆序排列

· 语法:列表名.reverser()

· #对y_list的元素进行逆序排列y_list=[2,3,4,5,2,2,3]y_list.reverser()print(y_list)

· 以上代码执行结果为:

Python数据类型串讲(中)

2.2.5 列表的复制

· copy():用于复制列表

· 用法:列表名.copy()

y_list=[2,3,4,5,2,2,3]y=y_list.copy()print(y)

以上代码执行结果为:

Python数据类型串讲(中)

注意区分赋值、浅复制copy()、深复制deepcopy():

· 赋值:对象的简单引用

· 浅复制:复制列表的父对象,但不复制对象内部的子对象

· 深复制:复制列表的父对象及子对象,需先导入copy模块

2.3 常用内置函数

除了序列通用的内置函数:len()、max()、len(),列表还含有以下内置函数:

· list():将其他类型强制转化为列表

· zip():将多个列表或元祖(后续会介绍)对应位置的元素组合为元祖,返回 zip对象

· enumerate():将一个可遍历对象(如列表、字符串)组合成一个含数据和数据索引的序列

3、元祖

3.1 元祖简介

元祖与列表一样是python的一种序列类型,可以使用序列的所有通用操作。元祖在python中以小括号"()“为标识,将一个或多个元素(以逗号分隔)括起来为一个元祖,其用法与列表非常类似,二者主要区别在于,列表内的元素可以修改,元祖内的元素不能修改,可以简单把元祖理解为列表的一个"可读版本”。

#元祖的创建x_tuple=(‘a’,2,[3,4])print(x_tuple)#元素修改会报错x_tuple[1]=3

以上代码执行结果为:

Python数据类型串讲(中)

注意:创建只有一个元素的元祖时,需要在后面加一个逗号,否则会返回元素本身。因为在python中小括号"()"同时也是数学运算上的一个基本符号,如(1+1)^2,如果创建只有一个元素的元祖时不加逗号分隔,python解释器会将小括号识别为数学运算符号。

y_tuple=(2333,)print(y_tuple)z_tuple=(2333,)print(z_tuple)

以上代码执行结果为:

Python数据类型串讲(中)

3.2 常用方法及内置函数

3.2.1 常用方法

由于元祖的元素不可变性,元祖无法对元素进行增加、删除、排序及复制操作,元祖中元素的查找与上述列表中用法一致。

x_tuple=(‘a’,2,[3,4])#元素的查找x_tuple.index(‘a’)#元素的复制x_tuple.count(2)

以上代码执行的结果为:

Python数据类型串讲(中)

注意:当元祖中所含元素为列表(可变序列)时,该列表嵌套项是可变的。

x_tuple=(‘a’,2,[3,4])#修改列表[3,4]中的元素,元祖也随之’变化’x_tuple[2][1]=3print(x_tuple)

以上代码执行结果为:

Python数据类型串讲(中)

3.2.2 常用内置函数

· len(tuple):返回元祖元素的个数

· max(tuple):返回元祖元素最大值

· min(tuple):返回元祖元素最小值

· tuple(seq):将序列转换为元祖

3.2.3 选择元祖or列表

· 特点:

· 列表:动态存储,长度大小可变,可对元素进行增删查改等操 作,但储存内存较大,性能偏差;

· 元祖:静态存储,长度大小固定,不可随意更新数据,内存占用空间小,处理速度快;

· 使用场景:

· 列表:需随时对数据进行更改,不考虑性能;

· 元祖:1. 数据需要被"锁定",不能随意更改; 2. 对性能有要求,如遍历; 3. 作为数据结构的一部分,如字典的key

相关文章:

  • 2021-06-17
  • 2021-12-08
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2021-10-03
  • 2021-11-17
猜你喜欢
  • 2021-07-13
  • 2021-07-22
  • 2021-11-10
  • 2021-11-26
  • 2022-12-23
  • 2021-08-02
  • 2022-02-21
相关资源
相似解决方案