4  组合数据类型——列表与字典

1. 基础知识

1.1组合数据类型

组合数据类型能够将多个同类型或者不同类型的数据组织起来,通过单一的表示使数据操作更有序、更容易。根据数据之间的关系,组合数据类型可以分为3类:序列类型、集合类型和映射类型。

序列类型是一个元素向量,元素之间存在先后关系,通过序号访问。

集合类型是一个元素集合,元素之间无序,相同元素在集合中唯一存在。

映射类型是“键-值”数据项组合,每个元素是一个键值对,表示为(key,value)。

1.2列表

列表是包含0个或多个对象引用的有序序列,属于序列类型。由一系列按特定顺序排列的元素组成,它与字符串类似。在字符串中,每个值都是字符;列表的最大特点就是其中的值可以是任何数据类型。列表中的值称为元素。创建列表最简单的方法就是用方括号([和])将元素包括起来,并用逗号来分割其中的元素。列表类型的操作总结如下:

函数或方法

描述

ls[i]=x

替换列表ls第i数据项为x

ls[i:j]=lt

用列表lt替换列表ls中第i到j项数据(不含第j项,同下)

ls[i:j:k]=lt

用列表lt替换列表ls中第i到j项以k为步数的数据

del ls[i:j]

删除列表ls第i到第j项数据,等价于ls[i:j]=[]

del ls[i:j:k]

删除列表ls第i到第j项以k为步数的数据

ls.extend(lt)

将列表lt元素增加到列表ls中

ls*=n

更新列表ls,其元素重复n次

ls.append(x)

在列表ls最后增加一个元素x

ls.clear()

删除列表ls中的所有元素

ls.copy()

生成一个新列表,复制ls中的所有元素

ls.insert(i,x)

在列表ls的第i位置增加元素x

ls.pop()

将列表ls中的第i项元素取出并删除该元素

ls.remove(x)

移除列表中值x的第一个匹配项

ls.reverse()

将列表中的元素反转

列表的索引

访问列表中的元素可以通过方括号加索引进行。例如,我们创建一个列表l=[1,2,3,'a'],可以通过l[0]来访问列表的第一个元素。注意,这里的索引是从0开始的。此外,Python中还有一种使用负数的索引方法。其中,整数值-1表示列表中的最后一个元素的索引,-2表示倒数第二个元素的索引。例如在上例中l[-1]的值为‘a’。

列表的切片

列表中切片的公式为:l=[strat : stop: step]。

1.3字典

在Python中,字典是一系列键-值对,每个键都与一个值相关联,你可以使用键来访问与之相关联的值,这些值可以使数字、字符串、列表乃至字典,字典是用放在花括号{}中的有一系列键-值表示:

{<键1>:<值1>, <键2>:<值2>, … , <键n>:<值n>}

其中,键和值通过冒号连接,不同键值对通过逗号隔开。例如,在成绩分档系统中,我们就可以使用字典将将学生的姓名和成绩关联起来,学生姓名作为键,学生成绩作为值:

Stu_Dic={'Tom' : 58, 'Jerry' : 67, 'Peter' : 82, 'Alex' : 93, 'Lily' : 89, 'Steven' : 97, 'Jack': 74}

注意,字典可以看成是键值对的集合,各个元素之间没有顺序。

字典键值对的访问

字典最主要的操作是查找有特定键值对应的值,通过索引实现。一般来说,字典中键值对的访问模式如下:

<值> = <字典变量>[<键>]

字典中对某个键值的修改可以通过中括号的访问和赋值实现。

字典类型的操作总结

函数或方法

描述

<>.keys()

返回所有的键信息

<>.values()

返回所有的值信息

<>.items()

返回所有的键值对

<>.get(<key>,<default>)

键存在,则返回相应值,否则返回默认值

<>.pop(<key>,<default>)

键存在则返回相应值,同时删除键值对,否则返回默认值

<>.popitem()

随机从字典中取出一个键值对,以元组(key, value)形式返回

<>.clear()

删除所有键值对

del <d>[<key>]

删除字典中某一个键值对

<key> in <d>

如果键值对在字典中则返回True,否则返回False

 

2实验步骤

2.1创建并访问列表

Step 1: 打开Spyder,新建一个名为c4_ex1.py的文件,并输入以下代码:

1

2

3

4

#新建列表

Stu_Name = ['Tome', 'Jerry', 'Peter', 'Alex', 'Jack']

#打印列表

print(Stu_Name)

第1行代码创建了一个列表,并将该列表的值赋给了名为Stu_Name的变量。

Step 2:请继续输入print(Stu_Name[1]),思考一下,这里我们使用Stu_Name[1]来访问列表中的第      个元素

在Python中,要访问列表中的任何元素,只需将列表的名称和该元素的位置或者索引告诉Python即可。例如,在Stu_Name[1]中,列表的名称为Stu_Name,元素索引为1。这里,我们需要特别注意,Python中的索引是从0而不是从1开始的。此外,索引可以用负数表示,尝试一下,验证Stu_Name[-1], Stu_Name[-2], Stu_Name[-3]的结果。

Step 3:我们将索引改成7,运行程序,输出结果为如下:

 

这是在使用列表是非常常见的错误,这是因为索引超出了列表中值得个数。再次提醒,列表中的索引值是从0开始的,列表Stu_Name中的元素个数是5,元素索引是从0到4。

2.2列表的操作

列表基本操作

Step 1:修改元素的值。在c4_ex1.py文件中继续输入以下代码:

5

6

7

#修改元素值

Stu_Name[0] = 'David'

print(Stu_Name)

我们发现列表中的第一个元素值被修改。由此,我们可以得出:要修改列表元素,只需要指定列表名和要修改的元素的索引,再指定该元素的新值即可。

Step 2:在列表中添加元素,可以分为两种情况:一是在列表末尾添加元素,需要用到append()函数;而是在列表中插入元素,需要用到insert()函数。在c4_ex1.py文件中继续输入以下代码:

8

9

10

11

12

13

#在列表末尾添加元素

Stu_Name.append('Ben')

print(Stu_Name)

#在列表中插入元素

Stu_Name.insert(1, 'Nancy')

print(Stu_Name)

请查询append()和insert()的具体用法,主要查看其形参和返回值。

Step 3:我们可以使用del语句和remove()函数来删除列表元素。其中,使用del语句需要我们知道要删除的元素所在列表中的位置,remove()函数的作用是根据值删除元素。例如,在第五行代码中,使用remove()函数来删除值为‘Nancy’的元素。

在c4_ex1.py文件中继续输入以下代码:

14

15

16

17

18

#删除列表文件

del Stu_Name[0]

print(Stu_Name)

Stu_Name.remove('Nancy')

print(Stu_Name)

列表排序

当我们创建一个列表时,我们无法预知列表的排列顺序。例如在成绩的例子中,我们在完成所有人员的成绩输入以后,想要按成绩从高到底排列,应该怎么做呢?

Step 1:新建一个名为c4_ex2.py的文件,输入代码如下:

1

2

3

4

5

#创建一个列表存储学生分数

Stu_Grade = [58, 82, 67, 93, 89]

#进行排序

Stu_Grade.sort()

print(Stu_Grade)

根据输出结果,我们可以得出sort()函数的作用是:                                       

Step 2:将第4行改为Stu_Grade.reverse(),观察结果,我们可以得出reverse()函数的作用是:                                                                                

Step 3:在新一行输入print(len(Stu_Score)),观察结果,我们得出len()函数的作为是:                                                                                          

遍历列表

遍历是指访问列表中的每个元素。我们可以使用循环结构来完成。

Step 1:在c4_ex1.py文件中,继续输入以下代码,来遍历Stu_Name列表:

19

20

21

#遍历列表

for temp in Stu_Name:

    print(temp)

列表切片

试想一下,如果我们只需要提取列表中前三个学生,应该怎么做?答案是将列表切片,其目的是处理列表中的部分元素。

Step 1:在c4_ex1.py文件中,继续输入以下代码:

22

23

24

25

26

#列表切片

print(Stu_Name[0:2])

print(Stu_Name[1:3])

print(Stu_Name[:2])

print(Stu_Name[2:])

根据输出结果,体会并总结切片的用法:

Step 3:遍历列表中的部分元素,称为遍历切片。输入以下代码:

27

28

29

#遍历切片

for temp in Stu_Name[0:3]:

    print(temp)

2.3字典的创建

  新建一个名为c4_ex3.py的文件,并输入以下代码创建字典:

1

2

3

#创建字典

Stu_Dict={'Tom' : 58, 'Jerry' : 67, 'Peter' : 97, 'Alex' : 93, 'Jack' : 84}

print(Stu_Dict)

在上面这个例子中,‘Tom’就是一个字典中的键,他的得分58就是字典中的值。

2.4字典的操作

访问字典的值

要访问字典中的值,只需要制定字典名和放在方括号内的键,例如继续在c4_ex3.py中输入以下代码来访问Jerry和Peter的得分。

4

5

6

#访问字典中Jerrypeter的得分

print(Stu_Dict['Jerry'])

print(Stu_Dict['Peter'])

修改字典中的值

修改字典中的值:要修改字典的值,可一次指定字典名、用方括号括起来的键和与该键相关联的新值。例如在上例中,我们需要将学生Jerry的成绩改为99,只需要输入Stu_Dic[‘Jerry’]=99

添加删除键值对

Step 1:添加键-值对:字典是一种动态结构,可以随时添加键-值对,例如我们现在要在之前的字典中添加一个学生Ben,他的成绩是83分,可以输入Stu_Dict[‘Ben’]=83

Step 2:删除键-值对:对于字典中不再需要的信息,可以使用del语句将对应的键-值对彻底删除,只需要指定字典名和要删除的键。例如,我们现在要删除学生Lily的信息,只需要输入del Stu_Dict[‘Jack’]

请在文件c4_ex3.py中继续输入如下代码,测试添加和删除键值对的方法:

7

8

9

10

11

#添加键值对

Stu_Dict['Ben']=83

#删除键值对

del Stu_Dict['Jack']

print(Stu_Dict)

遍历字典

字典的遍历可以分为三个方面:遍历所有键值对、遍历所有键、遍历所有值

Step 1:遍历所有键值对。继续在文件c4_ex3.py中输入以下代码:

12

13

14

15

#遍历所有键值对

for key, value in Stu_Dict.items():

    print("Key: " + key)

    print("Value: " + str(value))

这里使用了字典的item()方法,它返回一个键值对的列表,请探索该方法的用法,并解释为什么在15行中,需要使用str()方法?

Step 2:也可以单独遍历字典中的键和值,分别使用keys()方法和values()方法。继续在文件c4_ex3.py中输入以下代码:

16

17

18

19

20

21

#遍历所有键

for name in Stu_Dict.keys():

    print(name)

#遍历所有值

for grade in Stu_Dict.values():

    print(grade)

字典嵌套

在实际使用中,我们有事需要将一系列字典存储在列表中,获将列表作为值存储在字典中,就被称为嵌套。例如,我们上例中的同学是一个班的,现在我们需要存储其他班级学生的信息,应该怎么办呢?一个办法就是创建一个班级列表,其中的每一个班级都是一个字典,包含该班级中所有学生的姓名和分数,如以下代码所示:

22

23

24

25

26

27

28

#字典的嵌套

Class_1 = {'Tom' : 58, 'Jerry' : 67}

Class_2 = {'Peter' : 97, 'Alex' : 93, 'Jack' : 84}

Class_Total = [Class_1, Class_2]

#遍历列表并打印

for Stu in Class_Total:

    print(Stu)

在上面这段代码中,我们用两个字典Class_1和Class_2来表示两个班级,其中记录了两个班级的学生和对应的分数。之后,我们用一个列表Class_0存放班级信息,第5-6行则是用来遍历这个列表并打印出来。

3.练习题

3.1 编写一个名为chop的函数,让其接收如下列表作为参数,删除该列表的第一个元素和最后一个元素,返回新列表并打印输出:

t=['good', 'good', 'study', 'day', 'day', 'up'] 

3.2 创建一个名为 cities 的字典,其中将三个城市名用作键;对于每座城市,都创建一个字典,并在其中包含该城市所属的国家、人口约数以及一个有关该城市的简介。在表示每座城市的字典中,应包含 country、 population 和 introduction 三个键。最后,通过遍历的形式将每座城市的名字以及有关它们的信息都打印出来。

3.3 编写一个名为cumsum的函数,该函数接收一个数字列表,返回一个新的列表,其中第i个元素是原先列表前i个元素和。例如:

>>>t = [1,2,3]

>>>cumsum(t)

[1,3,6]

 

参考资料:

1. 像计算机科学家一样思考Python

2. Python123

3. Python编程从入门到实践

发布了14 篇原创文章 · 获赞 7 · 访问量 8431
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 精致技术 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览