
2.7 列表
列表(List)是Python中使用最频繁的数据类型。它由一系列按特定顺序排列的元素组成。它的元素可以是字符、数字、字符串,还可以包含列表(即嵌套)。在Python中,用方括号([])来表示列表,并用逗号(,)来分隔其中的元素。
2.7.1 列表的创建和删除

1.使用赋值运算符直接创建列表
同Python的变量一样,创建列表时,可以使用赋值运算符“=”直接将一个列表赋值给变量,如下所示。

代码中,classmates就是一个列表。列表的名称通常用各自复数的名称。另外,Python对列表中的元素和个数没有限制,如下所示也是一个合法的列表。

另外,一个列表的元素还可以包含另一个列表,如下所示。

2.创建空列表
在Python中,也可以创建空列表,如下所示的students即为一个空列表。

3.创建数值列表
在Python中,数值列表很常用。可以使用list()函数直接将range()函数循环出来的结果转换为列表,如下所示。

上面代码运行后的结果如下。

4.删除列表
对于已经创建的列表,可以使用del语句将其删除,如下所示删除之前创建的classmates列表。

2.7.2 访问列表元素

1.通过指定索引访问元素
列表中的元素是从0开始索引的,即第1个元素的索引为0,第2个元素的索引为1。如下所示为访问列表的第一个元素。

上述代码中classmates [0]表示第1个元素,如果要访问列表第2个元素,应该将程序第2句修改为“print(classmates [1])”。注意列表的索引从0开始,所以第2个元素的索引就是1,而不是2。如果要访问列表最后一个元素,可以使用特殊语法“print(classmates [-1])”来实现。上述代码的输出结果如下。

可以看到输出了列表的第1个元素,并且不包括方括号和引号。这就是访问列表元素的方法。
2.通过指定两个索引访问元素
如下所示为指定两个索引作为边界来访问元素。

[0:3]说明指定了第1个索引为列表的第1个元素;第2个索引为列表的第4个元素,但第2个索引不包含在切片内,所以输出了列表的第1~3个元素。
3.只指定第1个索引来访问元素
如下所示只指定第一个索引作为边界来访问元素。

[2:]说明指定了第1个索引为列表的第3个元素;没有指定第2个索引,那么Python会一直提取到列表末尾的元素,所以输出了列表的第3~6个元素。
4.只指定第2个索引来访问元素
如下所示只指定第2个索引作为边界来访问元素。

[:4]说明没有指定第1个索引,那么Python会从头开始提取;第2个索引是列表的第5个元素(不包含在切片内),所以输出了列表的第1~4个元素。
5.指定列表倒数元素索引来访问元素
如下所示只指定列表倒数元素的索引作为边界来访问元素。

[-3:]说明指定了第1个索引是列表的倒数第3个元素;没有指定第2个索引,那么Python会一直提取到列表末尾的元素,所以输出了列表的最后三个元素。
案例13:画五彩圆环
在IDLE中创建一个名为“圆环.py”的文件,然后在文件中导入turtle模块,创建一个颜色的列表,之后遍历range()生成的一个整数序列,然后每次循环时分别设定画笔颜色、圆的半径和画笔旋转角度,即可画出很多圆环,代码如下。

代码中“colors [x%4]”的意思是从colors列表中取一个元素(比如red)作为参数。x%4中的%是求余数的符号,x%4的意思是用x除以4得到的余数。如果x的值为5,则求得的余数为1。然后执行colors [1],从列表colors中取第2个元素“yellow”作为画笔颜色的参数。
运行结果如图2-2所示。

图2-2 五彩圆环
2.7.3 添加、修改和删除列表元素

1.添加列表元素
向列表中添加元素可以使用append()函数来实现,如下所示。

输出结果如下所示。

从输出结果可以看出,使用append()可以将元素“Mack”添加到列表的末尾。还可以使用insert()函数向列表中插入元素,如下所示。

上述代码中“insert()”函数参数中的1表示插到列表的第2个元素,“'Mack'”表示要插入的元素。
另外,还可以使用extend()函数将一个列表添加到另一个列表中,如下所示。

2.修改元素
要修改列表中的元素,只需通过索引获得该元素,然后再为其重新赋值即可。如下所示为将列表中的第2个元素修改为“Mack”。

3.删除元素
删除元素主要有两种方法:一种根据索引删除元素,另一种是根据元素值进行删除。如下所示为根据索引删除列表元素。

上述代码通过del来删除列表元素,另外,还可以通过pop()函数来删除列表元素,如下所示。

如下所示为根据元素值删除列表元素。

2.7.4 对列表进行统计和计算
Python的列表提供了一些内置的函数来实现统计、计算功能。
1.获取列表的长度
如下所示为通过len()函数来获得列表的长度(即列表中元素的个数)。

len()函数应用很广泛,比如统计网站注册用户数等。
2.获取指定元素出现的次数
使用列表对象的count()函数可以获取指定元素在列表中出现的次数,如下所示。

3.获取指定元素首次出现的位置
使用列表对象的index()函数可以获取指定元素在列表中首次出现的位置(即索引)。如下所示。

4.统计数值列表的元素和
使用列表对象的sum()函数可以统计数值列表各元素的和,如下所示。

2.7.5 列表的复制
要复制一个列表,可以创建一个包含整个列表的切片,方法是同时省略起始索引和终止索引,即[:],如下所示。

上述代码中从列表letters中提取了一个切片,创建了一个列表的副本,再将该副本存储到变量b中。
注意,这里是创建了一个列表的副本,而不是将letters赋给b(b=letters是赋给)。它们是有区别的,如下所示为复制列表。

上述代码运行的结果如下。

如下所示为将letters赋给b的情况。

上述代码运行的结果如下。

2.7.6 遍历列表
遍历列表中的所有元素是一种常用操作,在遍历的过程中可以完成查询、处理等功能。
1.使用for循环输出列表元素
可以使用for循环来遍历列表,依次输出列表的每个元素。如下所示为遍历列表。

上述代码运行后的结果如下所示。

每循环一次输出一个列表中的元素。
2.输出列表元素的索引值和元素
可以使用for循环和enumerate()遍历列表,实现同时输出索引值和元素内容,如下所示为遍历classmates列表。

上述代码运行后的结果如下所示。

案例14:分离红球和蓝球
在IDLE中创建一个名为“分球.py”的文件,然后在文件中创建一个红球和蓝球的列表,再定义两个空列表,接着遍历红蓝球的列表,判断遍历时每个元素是否为红球,如果是则加入红球的列表,如果是蓝球则加入蓝球的列表,最后分别输出存放红球和蓝球的列表,代码如下。


运行结果如下。
