- Python语言程序设计
- 石毅 张莉 高建华主编
- 1822字
- 2025-02-25 07:01:59
4.1 认识列表
4.1.1 什么是列表
列表(List)是Python中非常重要的数据类型,列表非常适合利用顺序和位置定位某一元素,尤其是当元素的顺序或内容经常发生改变时。与字符串不同,列表是可变的。它由一系列元素组成,所有的元素被包含在一对方括号中,是Python中最灵活的有序序列,列表可以存储任意类型的元素,通常作为函数的返回类型。列表和元组相似,也是由一组元素组成的,开发人员可以对列表实现添加、删除和查找等操作,元素的值可以被修改。在列表中,具有相同值的元素允许出现多次。
说明
使用过Java语言的读者可能想到了Java语言中的List接口,其中的ArrayList类继承自List接口,实现了动态数组的功能,可以添加或删除任意类型的对象。Python中列表的作用和ArrayList类相似,用法更灵活。
4.1.2 列表的创建方式
Python创建列表的方式非常简单,既可以使用中括号“[]”创建,也可以使用内置的list()函数快速创建。
1.使用中括号“[]”创建列表
使用中括号“[]”创建列表时,只需要在中括号“[]”中使用逗号分隔每个元素即可。列表的创建格式如下所示:

列表可以由零个或多个元素组成,元素之间用逗号分开,整个列表被方括号所包裹:

2.使用list()函数创建列表
可以使用list()函数来创建一个空列表:

使用list()函数同样可以创建列表,需要注意的是该函数接收的参数必须是一个可迭代类型的数据。例如:

4.1.3 访问列表元素
列表中的元素可以通过索引或切片的方式访问,下面分别使用这两种方式访问列表元素。
1.使用索引方式访问列表元素
使用索引可以获取列表中的指定元素。和字符串一样,通过偏移量可以从列表中提取对应位置的元素:

同样,负偏移量代表从尾部开始计数:

指定的偏移量对于待访问列表必须有效——该位置的元素在访问前已正确赋值。
注意
日常生活中,对某些东西计数或者编号的时候,可能会从1开始。所以Python使用的编号机制可能看起来很奇怪,但这种方法其实非常自然。在后面的章节中可以看到,这样做的一个原因是可以从最后一个元素开始计数:序列中的最后一个元素标记为-1,倒数第二个元素为-2,以此类推。这就意味着我们可以从第一个元素向前或者向后计数了,第一个元素位于最开始,索引为0,使用一段时间后,我们就会习惯于这种计数方式了。
2.使用切片方式访问列表元素
使用切片可以截取列表中的部分元素,得到一个新列表。例如:

使用切片提取列表的一个子序列:

获取列表中索引为2至末尾的元素:

获取列表中索引为0至索引为3的元素:

与字符串一样,列表的切片也可以设定除1外的步长。获取列表中的所有元素:

列表的切片仍然是一个列表。下面的例子从列表的开头开始每2个提取一个元素:

获取列表中索引为1至索引为4且步长为2的元素:

再试试从尾部开始提取,步长仍为2:

利用切片还可以巧妙地实现列表逆序:

4.1.4 列表的常用方法
在Python中,列表是由类list实现的,使用函数help(list)查看list类的定义,可以快速了解列表所包含的方法,Help函数同样适用于其他Python类。表4-1列出了列表的常用方法。
表4-1 列表的常用方法

4.1.5 技能训练
上机练习1列表使用
需求说明
请尝试编写一些简短的程序来完成下面的练习。
(1)将一些朋友的姓名存储在一个列表中,并将其命名为names。依次访问该列表中的每个元素,从而将每个朋友的姓名都打印出来。
(2)继续使用前面的names列表,但不打印每个朋友的姓名,而为每人打印一条消息。每条消息都包含相同的问候语,但抬头为相应朋友的姓名。
上机练习2数到20
需求说明
使用list()函数与range()函数来创建一个列表,使用一个for循环打印数字1~20(含)。
上机练习33的倍数
需求说明
创建一个列表,其中包含3~30内能被3整除的数字;再使用一个for循环将这个列表中的数字都打印出来。
上机练习4计算立方
需求说明
将同一个数字乘三次称为立方。例如,在Python中,2的立方用2**3表示。请创建一个列表,其中包含前10个整数(即1~10)的立方,再使用一个for循环将这些立方值都打印出来。
上机练习5切片使用
需求说明
自定义一个列表,以完成如下任务。
➢ 打印消息“The first three items in the list are:”,再使用切片来打印列表的前三个元素。
➢ 打印消息“Three items from the middle of the list are:”,再使用切片来打印列表中间的三个元素。
➢ 打印消息“The last three items in the list are:”,再使用切片来打印列表末尾的三个元素。
上机练习6刮刮乐
需求说明
刮刮乐的玩法多种多样,彩民只要刮去刮刮乐上的银色油墨即可查看是否中奖。每张刮刮乐都有多个兑奖区,每个兑奖区对应着不同的获奖信息,包括“一等奖”“二等奖”“三等奖”和“谢谢惠顾”。假设现在有一张刮刮乐,该卡片上面共有8个刮奖区,大家只能刮开其中一个区域。
编写程序,实现模拟刮刮乐刮奖的过程。