本课介绍Python列表类型,课中会讨论列表的创建、赋值及其相关运算。通过本课的学习,可以掌握列表类型的使用方法。
认识列表
列表类型是序列类型,列表对象支持序列对象所有通用的操作(序列对象的通用操作见“类与对象”一课),列表内存储元素的具体含义,在不同的情况下可以不同。它可以是一个数字类型,也可以是字符串,甚至是更复杂的数据。它可以存储Python预定义数据类型,也可以存储自定义的数据结构及对象。
创建列表对象并赋值
列表元素用方括号“[]”括起来,元素之间用英文逗号分隔。不同于其它编程语言,列表可以包含任意类型的元素,可以在同一个列表中存储字符串、浮点类型、对象、复数类型等数据。

在Python语言中,创建一个列表对象非常简单,案例01演示了如何创建列表对象。

案例01分别创建了存储字符串类型、浮点类型以及存储不同数据类型的列表。
列表也可以嵌套子列表,可以多层嵌套。

案例02的score列表,就内嵌了学生的成绩列表。
可变序列类型
列表是可变序列类型,可变序列类型是指可以添加元素到序列对象、也可以从序列对象中删除元素、也可以更新序列对象内元素的值。
可变序列对象提供了更新序列对象和对象内元素值的操作,这些操作对所有可变序列对象是通用的,下表列出了这些操作。
表格中的 s 是可变序列类型的实例对象,t 是任意可迭代对象(可迭代对象后面的课程会介绍,在这里可以认为是序列对象),而 x 是符合对 s 所规定类型与值限制的任何对象。
列表对象元素的更新

注释
(1)将序列对象s索引为i的元素更新为对象x。
案例代码:
>>> s = [20,18,16,12,10]
>>> s[1] = 19
>>> print(s)
[20, 19, 16, 12, 10]
>>>
(2)将序列对象s索引从i到j(不包含j)的切片,替换为可迭代对象t的内容。
案例代码:
>>> s = [20,18,16,12,10]
>>> t = [9,8,7]
>>> s[0:3] = t
>>> print(s)
[9, 8, 7, 12, 10]
>>>
(3)del是python的删除语句,使用del语句可以删除序列对象s指定索引的单个元素,也可以删除序列对象的切片。
案例代码:
>>> s = [20,18,16,12,10]
>>> del s[0]
>>> print(s)
[18, 16, 12, 10]
>>> del s[1:3]
>>> print(s)
[18, 10]
>>>
(4)将序列对象s索引从i到j(不包含j)且步长为k的切片,替换为可迭代对象t的内容。
案例代码:
>>> s = [20,18,16,12,10]
>>> t = [0.5,1.9]
>>> s[0:3:2] = t
>>> print(s)
[0.5, 18, 1.9, 12, 10]
>>>
(5)从序列对象s删除索引从i到j(不包含j)且步长为k的切片。
案例代码:
>>> s = [20,18,16,12,10]
>>> del s[0:3:2]
>>> print(s)
[18, 12, 10]
>>>
列表元素的操作

注释
(1)append()是序列对象s的方法,将元素x添加到序列对象s的末尾。
案例代码:
>>> s = [0.1,12,30.5,11,9]
>>> print(s)
[0.1, 12, 30.5, 11, 9]
>>> s.append(0.001)
>>> print(s)
[0.1, 12, 30.5, 11, 9, 0.001]
>>>
(2)clear()是序列对象s的方法,该方法移除序列对象s的所有元素。
案例代码:
>>> s = [0.1,12,30.5,11,9]
>>> print(s)
[0.1, 12, 30.5, 11, 9]
>>> s.clear()
>>> print(s)
[]
>>>
(3)copy()是序列对象s的方法,该方法用于复制序列对象s。
案例代码:
>>> s = [0.1,12,30.5,11,9]
>>> t = s.copy()
>>> print(t)
[0.1, 12, 30.5, 11, 9]
>>>
(4)extend(t)是序列对象s的方法,该方法扩展可迭代对象t到序列对象s。
案例代码:
>>> s = [0.1,12,30.5,11,9]
>>> print(s)
[0.1, 12, 30.5, 11, 9]
>>> t = [0.21,0.31]
>>> s.extend(t)
>>> print(s)
[0.1, 12, 30.5, 11, 9, 0.21, 0.31]
>>>
(5)使用序列对象s的内容,重复n次来更新序列对像s。
案例代码:
>>> s = [0.1,12,30.5,11,9]
>>> s *= 2
>>> print(s)
[0.1, 12, 30.5, 11, 9, 0.1, 12, 30.5, 11, 9]
>>> s = ["*"]
>>> s *= 8
>>> print(s)
['*', '*', '*', '*', '*', '*', '*', '*']
>>>
(6)insert(i,x)是序列对象s的方法,该方法在序列对象s指定的索引位置i插入x对象。
案例代码:
>>> s = [0.1,12,30.5,11,9]
>>> s.insert(0,0.09)
>>> print(s)
[0.09, 0.1, 12, 30.5, 11, 9]
>>> s.insert(2,10)
>>> print(s)
[0.09, 0.1, 10, 12, 30.5, 11, 9]
>>>
(6)pop(i)是序列对象s的方法,该方法从序列对象s提取索引为i的元素,并从s移除该元素。
案例代码:
>>> s = [0.1,12,30.5,11,9]
>>> s.pop(1)
12
>>> print(s)
[0.1, 30.5, 11, 9]
>>>
(7)remove(x)是序列对象s的方法,该方法从序列对象s移除第一个与x内容相同的元素。
案例代码:
>>> s = [0.1,12,30.5,11,9]
>>> s.remove(30.5)
>>> print(s)
[0.1, 12, 11, 9]
>>>
(8)reverse()是序列对象s的方法,该方法对s的元素逆序排列。
案例代码:
>>> s = [0.1,12,30.5,11,9]
>>> print(s)
[0.1, 12, 30.5, 11, 9]
>>> s.reverse()
>>> print(s)
[9, 11, 30.5, 12, 0.1]
>>>
列表的排序
在实际应用中,经常需要对列表内的元素进行排序。Python提供了内置函数sorted对可迭代对象(序列对象都是可迭代对象)进行排序。
sorted函数声明如下:
sorted(iterable, *, key=None, reverse=False)
参数iterable是可迭代对象。
参数key 指定带有单个参数的函数,用于从 iterable 的每个元素中提取用于比较的键 (例如 key=str.lower)。 默认值为 None (直接比较元素)。
reverse 为一个布尔值。 如果设为 True,则每个列表元素将按反向顺序比较进行排序。该参数默认值是False。
注意:sorted函数会返回一个已排序的可迭代对象,传入的iterable元素的顺序没有变化。
案例代码:
>>> s = [0.1,12,30.5,11,9]
>>> t = sorted(s)
>>> print(t)
[0.1, 9, 11, 12, 30.5]
>>> print(s)
[0.1, 12, 30.5, 11, 9]
>>>
列表类型也提供了sort()方法,用于对列表内的元素进行排序。
sort()方法声明如下:
sort(*, key=None, reverse=False)
参数key 指定带有一个参数的函数,用于从每个列表元素中提取比较键 (例如 key=str.lower)。 对应于列表中每一项的键会被计算一次,然后在整个排序过程中使用。 默认值 None 表示直接对列表项排序而不计算一个单独的键值。
参数reverse为一个布尔值。 如果设为 True,则每个列表元素将按反向顺序比较进行排序。
案例代码:
>>> s = [0.1,12,30.5,11,9]
>>> s.sort()
>>> print(s)
[0.1, 9, 11, 12, 30.5]
>>>
列表的遍历
顺序访问列表的所有元素,称为列表的遍历或遍历列表。
遍历列表一般使用for循环语句,根据取值方式的不同,可分为二种遍历方式。
按列表元素遍历
列表元素作为循环变量,列表对象作为循环序列。案例代码如下:
#创建存储字符串类型的列表
student = ['张明',"赵虎","马汉","李云龙","王义"]
#按列表元素遍历
for st in student:
print("序号:%s 值:%s" % (student.index(st) + 1, st))
按列表索引遍历
列表索引作为循环变量,使用内置range函数创建循环范围为0至列表长度的整数序列。案例代码如下:
#创建列表对象
s = [9,12,20,15,35,21]
#按列表索引遍历
for i in range(len(s)):
print ("序号:%s 值:%s" % (i+1, s[i]))