购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

3.3 列表与元组

列表是Python中内置的可变序列,由一系列按特定顺序排列的元素组成。列表的所有元素都放在一对中括号“[ ]”中,相邻元素间使用英文逗号“,”分隔。整数、实数、字符串、列表、元组等任何类型的内容都可以放入列表中,且同一个列表中元素的类型可以不同,因为它们之间没有任何关系。由此可见,Python中的列表是非常灵活的,这一点与其他语言是不同的。

3.3.1 列表的创建

在Python中提供了多种创建列表的方法,下面分别进行介绍。

1.使用赋值运算符直接创建列表

创建列表时,也可以使用赋值运算符“=”直接将一个列表赋值给变量。语法格式如下:

参数说明:

listname:列表名称,可以是任何符合Python命名规则的标识符。

elemnet 1,elemnet 2,…,elemnet n:列表中的元素,个数没有限制,只要是Python支持的数据类型就可以。

例如,下面定义的都是合法的列表。

说明

虽然可以将不同类型的数据放在同一个列表中,但通常情况下不这样做。建议大家一个列表只放入一种类型的数据,这样可以提高程序的可读性。

2.创建空列表

在Python中可以创建空列表。例如,创建一个名称为emptylist的空列表,代码如下:

3.创建数值列表

数值列表很常见,创建数值列表需要使用list()函数。例如,在考试系统中记录学生的成绩,或者在游戏中记录每个角色的位置、各个玩家的得分等,都可以应用数值列表来保存对应的数据。

list()函数的基本语法格式如下:

其中,data是可以转换为列表的数据,类型可以是range对象、字符串、元组或其他可迭代类型。

例如,创建一个10~20(不包括20)范围所有偶数的列表,可以使用下面的代码:

运行上面的代码后,将得到下面的列表:

说明

使用list()函数不仅能通过range对象创建列表,还可以通过其他对象创建列表。

3.3.2 检测列表元素

在Python中,可以直接使用print()函数输出列表的内容。例如,要打印上面创建的untitle列表,可以使用下面的代码:

运行结果如下:

可以看出,输出列表时会包括左右两侧的中括号。如果不想输出全部元素,可通过列表索引获取指定的元素。例如,要获取列表untitle中索引为2的元素,可以使用下面的代码:

运行结果如下:

从上面的运行结果中可以看出,输出单个列表元素时,不包括中括号;如果是字符串,不包括左右的引号。

3.3.3 列表的截取—切片

列表的截取就是切片操作,它可以访问一定范围内的元素,并通过切片操作生成一个新的序列。实现切片操作的语法格式如下:

参数说明:

sname:序列的名称。

start:切片的开始位置(包括该位置)。如果不指定,则默认为0。

end:切片的截止位置(不包括该位置)。如果不指定,则默认为序列的长度。

step:切片的步长。如果省略,则默认为1。当省略该步长时,最后一个冒号也要省略。

说明

进行切片操作时,如果指定了步长,将按照该步长遍历序列中的元素,否则将逐个元素地遍历序列。

例如,通过切片获取热门综艺名称列表中的第2~5个元素,以及获取第1个、第3个和第5个元素,可以使用下面的代码。

运行上面的代码,将输出以下内容:

说明

要想复制整个序列,可以将start和end参数都省略,但中间的冒号需要保留。例如,verse[:]表示复制verse列表中的整个序列。

3.3.4 列表的拼接

在Python中,支持两种相同类型列表的相加操作。这里,“相加”的含义是将两个列表拼接起来,使用加号运算符“+”来实现。例如,将两个列表相加,可以使用下面的代码。

运行上面的代码,将输出以下内容:

从输出结果可以看出,两个列表被合并为一个列表了。

说明

进行序列相加时,相同类型的序列是指同为列表、元组、集合等,序列中的元素类型可以不同。例如,下面的代码也是正确的:

相加后的结果如下:

但不能是列表和元组相加,或者列表和字符串相加。例如,下面的代码就是错误的:

上面的代码运行后将产生如图3.42所示的异常信息。

图3.42 将列表和字符串相加产生的异常信息

3.3.5 遍历列表

有时候,我们需要遍历列表中的所有元素,以实现查询、修改、删除等功能。在Python中遍历列表的方法有多种,下面介绍两种常用的方法。

1.使用for循环遍历列表

直接使用for循环遍历列表,并输出元素的值,语法格式如下:

参数说明:

item:用于保存获取到的元素值。输出元素内容时,直接输出该变量即可。

listname:列表的名称。

【实例3.16】 输出热门综艺的名称。 (实例位置:资源包\Code\03\16)

定义一个保存热门综艺名称的列表,然后通过for循环遍历该列表,并输出各综艺的名称。具体代码如下:

运行上面的代码,结果如图3.43所示。

2.使用for循环和enumerate()函数遍历列表

使用for循环和enumerate()函数遍历列表,可以同时输出索引值和对应的元素内容。语法格式如下:

参数说明:

index:用于保存元素的索引。

item:用于保存获取到的元素值。输出元素内容时,直接输出该变量即可。

listname:列表的名称。

例如,定义一个保存热门综艺名称的列表,然后通过for循环和enumerate()函数遍历该列表,并输出索引和综艺名称,代码如下:

执行上面的代码,将显示下面的结果。

如果想实现分两列(两个综艺一行)输出热门综艺名称,请看下面的实例。

【实例3.17】 分两列输出热门综艺名称。 (实例位置:资源包\Code\03\17)

创建一个文件,在该文件中先输出标题,然后定义一个列表(保存综艺名称),再应用for循环和enumerate()函数遍历列表,在循环体中通过if…else语句判断是否为偶数,如果为偶数则不换行输出,否则换行输出。具体代码如下:

说明

上面的代码中,print()函数中使用“, end=''”表示不换行输出,即下一条print()函数的输出内容会和这条内容在同一行输出。

运行结果如图3.44所示。

图3.43 通过for循环遍历列表

图3.44 分两列显示热门综艺名称

3.3.6 列表排序

在实际开发时,经常需要对列表进行排序。Python中提供了两种常用的列表排序方法,下面分别进行介绍。

1.使用列表对象的sort()方法排序

使用列表对象的sort()方法,可对列表中的元素进行排序。排序后,原列表中的元素顺序将发生改变。sort()方法的语法格式如下:

参数说明:

listname:要进行排序的列表。

key:在指定列表中选择一个用于比较的键。如果设置“key=str.lower”,表示在排序时不区分字母大小写。

reverse:可选参数。其值为True,表示降序排列;为False,则表示升序排列。默认为升序排列。

例如,定义一个保存10名学生语文成绩的列表,然后应用sort()方法对其进行排序,代码如下:

执行上面的代码,将显示以下内容。

使用sort()方法对数值列表进行排序比较简单,但在对字符串列表进行排序时,采用的规则是先对大写字母进行排序,然后再对小写字母进行排序。如果不需要区分大小写字母,需要指定参数key。例如,定义一个保存英文字符串的列表,然后应用sort()方法对其进行升序排列,可以使用下面的代码。

运行上面的代码,将显示以下内容。

说明

sort()排序方法对于中文的支持不够友好,排序的结果与我们常用的按拼音或者按笔画排序都不一致。如果需要对中文内容的列表排序,还需要重新编写排序方法,不能直接使用sort()方法。

2.使用内置的sorted()函数排序

使用内置的sorted()函数,也可以对列表进行排序。storted()函数的语法格式如下:

参数说明:

iterable:要进行排序的列表名称。

key:在指定列表中选择一个用于比较的键。如果设置“key=str.lower”,表示在排序时不区分字母大小写。

reverse:可选参数。其值为True,表示降序排列;为False,则表示升序排列。默认为升序排列。

例如,定义一个保存10名学生语文成绩的列表,然后应用sorted()函数对其进行排序,代码如下:

执行上面的代码,将显示以下内容。

说明

列表对象的sort()方法和内置sorted()函数的作用基本相同,不同的是:使用sort()方法时,会改变原列表的元素排列顺序;使用storted()函数时,会建立一个原列表的副本,该副本为排序后的列表。

3.3.7 元组

元组(tuple)是Python中另一个重要的序列结构。与列表类似,元组也由一系列按特定顺序排列的元素组成,但却是不可变序列。因此,元组也可以称为不可变的列表。

形式上,元组的所有元素都放在一对小括号“()”中,相邻元素间使用英文逗号“,”分隔。内容上,可以将整数、实数、字符串、列表、元组等任何类型的内容放入元组中,且同一个元组中元素的类型可以不同。通常情况下,元组用于保存程序中不可修改的内容。

1.元组的创建

在Python中提供了多种创建元组的方法,下面分别进行介绍。

1)使用赋值运算符直接创建元组

创建元组时,可以使用赋值运算符“=”直接将一个元组赋值给变量。语法格式如下:

参数说明:

tuplename:元组的名称,可以是任何符合Python命名规则的标识符。

elemnet 1,elemnet 2,…,elemnet n:元组中的元素,个数没有限制,只要是Python支持的数据类型就可以。

说明

元组的创建格式与列表类似,只是创建列表使用的是中括号“[]”,而创建元组使用的是小括号“()”。

例如,下面定义的都是合法的元组。

在Python中,虽然元组的标准格式是使用一对小括号将所有的元素括起来,但是实际上,小括号并不是必须的。只要将一组值用逗号分隔开来,就可以认为它是元组。例如,下面的代码定义的也是元组。

在IDLE中输出该元组后,将显示以下内容。

如果要创建的元组中只包括一个元素,则需要在定义元组时在元素的后面加一个逗号“,”。例如,下面的代码定义的就是包括一个元素的元组。

在IDLE中输出verse,将显示以下内容:

而下面的代码,则表示定义一个字符串:

在IDLE中输出verse,将显示以下内容:

说明

在Python中,可以使用type()函数测试变量的类型。例如,有下面的代码:

在IDLE中执行上面的代码,将显示以下内容。

2)创建空元组

在Python中,也可以创建空元组,例如,要创建一个名称为emptytuple的空元组,代码如下:

空元组可以应用在为函数传递一个空值或者返回空值时。例如,定义一个函数必须传递一个元组类型的值,而我们还不想为它传递一组数据,就可以创建一个空元组并传递给它。

3)创建数值元组

可以使用tuple()函数将一组数据转换为元组,基本语法如下:

其中,data表示可以转换为元组的数据,其类型可以是range对象、字符串、元组或者其他可迭代类型的数据。

例如,创建一个10~20(不包括20)范围所有偶数的元组,可以使用下面的代码:

运行上面的代码后,将得到下面的元组:

说明

使用tuple()函数不仅能通过range对象创建元组,还可以通过其他对象创建元组。

2.访问元组元素

在Python中,可以直接使用print()函数输出元组的内容。例如,要想打印前面创建的untitle元组,可以使用下面的代码:

执行结果如下:

从执行结果可以看出,输出元组时包括左右两侧的小括号。如果不想输出全部的元素,可通过元组索引来获取指定的元素。例如,要获取元组untitle中索引为0的元素,可以使用下面的代码:

执行结果如下:

从执行结果可以看出,输出单个元组元素时不包括小括号;如果是字符串,不包括左右的引号。

另外,对于元组也可以采用切片方式获取指定的元素。例如,要访问元组untitle中前3个元素,可以使用下面的代码:

执行结果如下:

同列表一样,元组也可以使用for循环进行遍历,方法不再赘述。 a4bZme4UjVXuhvJa+6ZlQsXgc09oMU0862hlZX6bdcWrqTVjQfIJbT/GsCZCsELF

点击中间区域
呼出菜单
上一章
目录
下一章
×