Python 列表(List)是不同数据类型的集合,用中括号[ ]来将存放的元素括起来,可以提供数据存储的记忆空间。
列表中的数据有顺序性,也能改变数据的内容,也就是说列表是一种可以用一个变量名称来表示的集合。列表中的每一个元素都可以通过索引值取得。
列表的组成元素可以是不同的数据类型,甚至可以是其他的子列表,当列表内没有任何元素时,则称之为空列表。例如,以下列表都是合法的 Python 列表。
list1 = [] #没有任何元素的空列表
score = [98, 85, 76, 64,100] #只存储数值的列表
info= ['2018', 176, 80, '北京市'] #含有不同数据类型的列表
mixed = ['manager', [58000, 74800], 'labor', [26000, 31000]]
又如,以下变量 employee 也是一种列表,其中共有 6 个元素,分别表示“部门编号”“主管”“姓名”“薪资”“专长”“性别” 6 项数据。
employee = ['sale9001','陈正中', '许富强',54000,'财务','Male']
Python 列表的中括号里面也可以含有其他表达式,如 for 语句、if 语句等,这种方式提供了另一种更快速的更具有弹性的建立列表的方式。例如,以下的列表元素是 for 语句的 i。
>>>data1=[i for i in range(5,18,2)]
>>> data1
[5, 7, 9, 11, 13, 15, 17]
>>>
再来看另外一个例子。
>>> data2=[i+5 for i in range(10,45)]
>>> data2
[15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40,
41, 42, 43, 44, 45, 46, 47, 48, 49]
>>>
还有一点要说明,列表中的元素也像字符串中的字符一样具有顺序性,因此支持切片运算,可以通过截取运算符 “[]” 截取列表中指定索引的子列表,例如以下的例子。
>>> list = [7,5,4,3,8,1,9,6]
>>> list[4:8]
[8, 1, 9, 6]
>>> list[-2:]
[9, 6]
>>>
又例如以下的例子。
word = ['H','O','L','I','D','A', 'Y']
print(word [:5]) #取出索引值为0~4的元素
print(word [1:5]) #取出索引值为1~4的元素
print(word [3:]) #取出索引值为3之后的元素
输出结果:
['H', 'O', 'L', 'I', 'D']
['O', 'L', 'I', 'D']
['I', 'D', 'A', 'Y']
另外,列表本身提供了 list() 函数,该函数可以将字符串转换成列表类型,也就是说它会将字符串拆解成单一字符,再转换成列表的元素。我们直接以下面这个例子来说明。
【示例1】代码如下:
print(list('CHINESE'))
输出结果:
['C', 'H', 'I', 'N', 'E', 'S', 'E']
在 Python 中,列表中可以有列表,这种列表称为二维列表。要读取二维列表中的数据,可以通过 for 循环来完成。
二维列表是指列表中的元素是列表,例如下面的例子。
num = [[25, 58, 66], [21, 97, 36]]
上例中的 num 是一个列表。num[0] 又称第一行索引,存放另一个列表;num[1] 又称第二行索引,也存放一个列表,以此类推。每个列表的索引如表 1 所示。
列索引[0] | 列索引[1] | 列索引[2] | |
---|---|---|---|
行索引[0] | 25 | 58 | 66 |
行索引[1] | 21 | 97 | 36 |
如果要读取二维列表中特定的元素,其语法如下。
列表名称[行索引][列索引]
例如下面的代码。
num = [[25,58,66],[21,97,36]]
num[0] #输出第一行的3个元素
[25, 58, 66]
num[1][1] #输出第二行的第二列元素
97
在 Python 中,三维列表声明方式如下。
num=[[[58,87,77],[62,18,88],[57,39,46]],[[28,89,40],[26,55,34],[58,56,92]]]
【示例2】这个例子就是一种三维列表的初始值设定及各种不同列表的存取方式。代码如下:
num=[[[58,87,77],[62,18,88],[57,39,46]],[[28,89,40],[26,55,34],[58,56,92]]]
print(num[0])
print(num[0][0])
print(num[0][0][0])
输出结果:
[[58, 87, 77], [62, 18, 88], [57, 39, 46]]
[58, 87, 77]
58
我们知道 del 语句除了可以删除变量,还可以删除列表中指定位置的元素与指定范围的子列表,例如下面的代码。
>>> L=[51,82,77,48,35,66,28,46,99]
>>> del L[6]
>>> L
[51, 82, 77, 48, 35, 66, 46, 99]
>>>
下面的代码会删除 L 列表中索引值为 1~3(即 4 的前一个索引值)的元素。
>>> L=[51,82,77,48,35,66,28,46,99]
>>> del L[1:4]
>>> L
[51, 35, 66, 28, 46, 99]
>>>
如果要检查某一个元素是否存在或不存在于列表中,则可以使用 “in” 与 “not in” 运算符,例如下面的代码。
>>> "happy" in ["good","happy","please"]
True
>>> "sad" not in ["good","happy","please"]
True
>>>
列表的复制是指复制一个新的列表,这两个列表内容互相独立,当改变其中一个列表的内容时,不会影响到另一个列表的内容。
【示例3】】假设姐弟两人有一些父母亲遗传的共同特点,但各自也有自己的特点,我们就可以以列表复制的方式来示范这样的概念。代码如下:
parents= ["勤俭", "老实", "客气"]
child=parents[:]
daughter=parents[:]
print("parents特点",parents)
print("child特点",child)
print("daughter特点",daughter)
child.append("毅力")
daughter.append("时尚")
print("分别新增小孩的特点后:")
print("child特点",child)
print("daughter特点",daughter)
输出结果:
parents特点 ['勤俭', '老实', '客气']
child特点 ['勤俭', '老实', '客气']
daughter特点 ['勤俭', '老实', '客气']
分别新增小孩的特点后:
child特点 ['勤俭', '老实', '客气', '毅力']
daughter特点 ['勤俭', '老实', '客气', '时尚']
我们可以试着将上述程序代码稍加修改。
child=parents[:]
daughter=parents[:]
修改成直接将变量名称设定给另一个变量,这样会造成这 3 个变量的列表内容互相联动,只要更改其中一个变量的列表内容,另外两个变量的列表内容也会同步更新,而这种结果就不是原先我们所预期的列表复制的想法,此时代码可写为如下形式。
child=parents
daughter=parents
【示例4】修改后完整的程序代码如下所示:
parents= ["勤俭", "老实", "客气"]
child=parents
daughter=parents
print("parents特点",parents)
print("child特点",child)
print("daughter特点",daughter)
child.append("毅力")
daughter.append("时尚")
print("分别新增小孩的特点后:")
print("child特点",child)
print("daughter特点",daughter)
输出结果:
parents特点 ['勤俭', '老实', '客气']
child特点 ['勤俭', '老实', '客气']
daughter特点 ['勤俭', '老实', '客气']
分别新增小孩的特点后:
child特点 ['勤俭', '老实', '客气', '毅力', '时尚']
daughter特点 ['勤俭', '老实', '客气', '毅力', '时尚']
由于列表中的元素可以任意地增加或删减,因此列表的长度可以变动。列表是一种可变的序列数据类型。下面介绍与列表操作相关的常用函数。
append() 函数会在列表末端加入新的元素,格式如下。
List.append(新元素)
例如下面的代码。
word = ["red", "yellow", "green"]
word.append("blue")
print(word)
输出结果:
['red', 'yellow', 'green', 'blue']
insert() 函数可以指定新的元素插入列表中指定的位置,格式如下。
List.insert(索引值, 新元素)
索引值是指列表的索引位置,索引值为 0 表示放置在最前端。举例来说,要将新元素插入索引值为 2 的位置,可以表示如下。
word = ["red", "yellow", "green"]
word.insert(2,"blue")
print(word)
输出结果:
['red', 'yellow', 'blue', 'green']
remove() 函数可以在括号内直接指定要移除的元素,例如下面的代码。
word = ["red", "yellow", "green"]
word.remove ("red")
print(word)
输出结果:
['yellow', 'green']
pop() 函数可以在括号内指定移除某个索引位置的元素,例如下面的代码。
word = ["red", "yellow", "green"]
word.pop(2)
print(word)
输出结果:
['red', 'yellow']
如果 pop() 括号内没有指定索引值,则默认移除最后一个元素。
word = ["red", "yellow", "green"]
word.pop()
word.pop()
print(word)
输出结果:
['red']
sort() 函数可以将列表元素进行排序,例如下面的代码。
word = ["red", "yellow", "green"]
word.sort()
print(word)
输出结果:
['green', 'red', 'yellow']
reverse() 函数可以将列表元素进行反转排列,例如下面的代码。
word = ["red", "yellow", "green"]
word.reverse()
print(word)
输出结果:
['green', 'yellow', 'red']
len() 函数可以返回列表的长度,亦即该列表包含几个元素,例如下面的代码。
word = ["red", "yellow", "green"]
print( len(word) ) #长度=3
count() 函数可以返回列表中特定内容出现的次数。
举例来说,如果我们从历年的英语考题中将所考过的单词收集在一个列表中,此时就可以利用 count() 函数去计算特定单词出现的次数,从而判断这些常考单词的出现频率,例如下面的代码。
word = ["holiday", "happy", "birth","yesterday", "holiday", "car","yellow", "happy", "mobile","cup", "happy", "holiday","holiday", "desk", "birth",]
print("holiday 出现的次数", word.count("holiday"))
输出结果:
holiday 出现的次数 4
index() 函数可以返回列表中特定元素第一次出现的索引值,例如下面的代码。
word = ["holiday", "happy", "birth","yesterday", "holiday", "car","yellow", "happy", "mobile","cup", "happy", "holiday","holiday", "desk", "birth",]
search_str="yellow"
print("单词 %s 第一次出现的索引值为%d" %(search_str,word.index(search_str)))
输出结果:
单词 yellow 第一次出现的索引值为6
【示例5】使用 append() 函数附加元素到列表中,最后再将列表的内容输出。Python 代码如下:
num=int(input('请输入总人数: '))
student = [] #建立空的列表
print('请输入{0}个数值:'.format(num))
# 用for循环依次读取要输入的分数
for item in range(1,num+1):
score = int(input()) #取得输入数值
student.append(score) #将输入数值新增到列表中
print('已输入完毕')
#输出数据
print('总共输入的分数', end = '\n')
for item in student:
print('{:3d} '.format(item), end = '')
输出结果:
请输入总人数: 5
请输入5个数值:
98
96
78
84
79
已输入完毕
总共输入的分数
98 96 78 84 79
程序解说:
【示例6】应用列表的 sort() 函数来进行数据排序。Python 代码如下:
no = [105, 25, 8, 179, 60, 57]
print('排序前的数据顺序:',no)
no.sort() #省略reverse参数, 递增排序
print('递增排序:', no)
zoo = ['tiger', 'elephant', 'lion', 'rabbit']
print('排序前的数据顺序:')
print(zoo)
zoo.sort(reverse = True) #根据字母递减排序
print('根据单词字母递减排序:')
print(zoo)
输出结果:
排序前的数据顺序: [105, 25, 8, 179, 60, 57]
递增排序: [8, 25, 57, 60, 105, 179]
排序前的数据顺序:
['tiger', 'elephant', 'lion', 'rabbit']
根据单词字母递减排序:
['tiger', 'rabbit', 'lion', 'elephant']
程序解说:
【示例7】列表中 reverse() 函数的应用实例。Python 代码如下:
no = [185, 278, 97, 48, 33, 61]
print('反转前内容:', no)
no.reverse()
print('反转后内容:', no)
zoo = ['tiger', 'lion', 'horse', 'cattle']
print('反转前内容:', zoo)
zoo.reverse()
print('反转后内容:', zoo)
输出结果:
反转前内容: [185, 278, 97, 48, 33, 61]
反转后内容: [61, 33, 48, 97, 278, 185]
反转前内容: ['tiger', 'lion', 'horse', 'cattle']
反转后内容: ['cattle', 'horse', 'lion', 'tiger']
程序解说: