目前,我们已经掌握了3种数据类型:整数、浮点数、字符串。这一关我们就要学习两种新的数据类型:列表、字典。
前三种类型 每次赋值只能保存一条数据。如果我们需要使用很多数据的时候,就会很不方便。 而列表和字典 就是可以帮我们存储大量数据,让计算机去读取和操作。
计算机和数据的关系:
第一种:直接使用数据,比如print()
语句,可以直接把我们提供的数据打印出来,通常所见即所得。
第二种: 将两个print语句,计算机都是先【计算和加工数据】,再把print()
括号里的数据打印到屏幕里。
例如:
print(3+2*3)
print('欢迎来到'+'第4关')
终端就会显示 9 欢迎来到第4关
第三种:计算机根据逻辑命令进行判断。
#列表
啥是列表?list
中括号里的内容就是列表元素。一个列表需要用中括号[ ]
把里面的各种数据框起来,里面的每一个数据叫作“元素”。每个元素之间都要用英文逗号隔开。
列表很包容,各种类型的数据(整数/浮点数/字符串)无所不能包。 可以同时包括整数,字符串和浮点数。
##从列表中提取单个元素
这就涉及到一个新的知识点:偏移量。列表中的各个元素,好比教室里的某排学生那样,是有序地排列的,也就是说,每个元素都有自己的位置编号(即偏移量)。
从上图可得:1.偏移量是从0开始的,而非我们习惯的从1开始;2.列表名后加带偏移量的中括号,就能取到相应位置的元素。
##从列表提取多个元素
list2 = [5,6,7,8,9]
print(list2[:]) #取全部
print(list2[2:]) #取偏移量2之后的
print(list2[:2]) #取偏移量2之前的
print(list2[1:3]) #取偏移量为1和3
print(list2[2:4]) #取偏移量为2和4
终端输出结果为:
[5, 6, 7, 8, 9]
[7, 8, 9]
[5, 6]
[6, 7]
[7, 8]
冒号来截取列表元素的操作叫作切片,顾名思义,就是将列表的某个片段拿出来处理。这种切片的方式可以让我们从列表中取出多个元素。而第二行代码,取【:】是指全取.需要注意的是,切片取出的还是列表,例如上述例子,终端输出的都为带了【】的列表。而如果我们用print(list2[2])则输出结果为元素。
##给列表增加/删除元素
需要用到append()函数给列表增加元素,append的意思是附加,增补。
用append()给列表增加元素,每次只能增加一个元素。
students = ['小明','小红','小刚'] students.append('小美') print(students)
就把小美加到了列表里。
将元素从列表里删除, 需要用到del语句
事实上del语句非常方便,既能删除一个元素,也能一次删除多个元素(原理和切片类似,左取右不取)。
类似这种名字和数值(如分数、身高、体重等)两种数据存在一一对应的情况,用第二种数据类型——“字典”(dictionary)来存储会更方便。
字典和列表有3个地方是一样的:1.有名称;2.要用=
赋值;3.用逗号作为元素间的分隔符。而不一样的有两处:1.列表外层用的是中括号[ ]
,字典的外层是大括号{ }
;
students = ['小明','小红','小刚'] scores = {'小明':95,'小红':90,'小刚':90}
我们可以用len()函数来得出一个列表或者字典的长度(元素个数),括号里放列表或字典名称。
字典的元素是由一个个键值对构成的,用英文冒号连接我们把字典里的元素 小明 叫 键 key, 把分数叫值value。这里需要强调的是,字典中的键具备唯一性,而值可重复。也就是说字典里不能同时包含两个'小明'
的键,但却可以有两个同为90
的值。
##从字典中提取元素
例如:
scores = {'小明': 95, '小红': 90, '小刚': 90}
print(scores['小明'])
终端就会显示:95
这便是从字典中提取对应的值的用法。和列表相似的是要用[ ]
,不过因为字典没有偏移量,所以在中括号中应该写键的名称,即字典名[字典的键]。
##给字典增加/删除元素
删除字典里键值对的代码是del语句del 字典名[键]
,而新增键值对要用到赋值语句字典名[键] = 值
。
例如:小刚的分数错了,要从90改到92, 新来的小美的成绩忘了加在成绩单上
scores = {'小明':95,'小红':90,'小刚':90} #原始字典 del scores['小刚'] scores['小刚'] = 92 scores['小美'] = 85 print(scores)
终端输出即为最终的字典
##列表和字典的不同点
一个很重要的不同点是列表中的元素是有自己明确的“位置”的 (偏移值),所以即使看似相同的元素,只要在列表所处的位置不同,它们就是两个不同的列表。
而字典相比起来就显得随和很多,调动顺序也不影响(因为字典中的键是唯一的)。因为列表中的数据是有序排列的,而字典中的数据是随机排列的。
所以,列表有序,要用偏移量定位;字典无序,便通过唯一的键来取值。
##列表和字典的相同点
第一个共同点:在列表和字典中,如果要修改元素,都可用赋值语句来完成。
第二个共同点其实之前已经略有提及,即支持任意嵌套。除之前学过的数据类型外,列表可嵌套其他列表和字典,字典也可嵌套其他字典和列表。
例如:列表嵌套列表。
你在班级里成立了以四人为单位的学习小组。这时,列表的形式可以写成:
students = [['小明','小红','小刚','小美'],['小强','小兰','小伟','小芳']]
当我们在提取这种多级嵌套的列表/字典时,要一层一层地取出来,就像剥洋葱一样:
如果我们要取出小芳,就先剥第一层,看到她在第二个子列表里,然后呢, 在第二个表的第3个是她的偏移值。所以取出小芳的代码:
students = [['小明','小红','小刚','小美'],['小强','小兰','小伟','小芳']] print(students[1][3])
例二: 字典嵌套字典。
和列表嵌套列表也是类似的,需要一层一层取出来,比如说要取出小芳的成绩,代码是这样写:
scores = { '第一组':{'小明':95,'小红':90,'小刚':100,'小美':85}, '第二组':{'小强':99,'小兰':89,'小伟':93,'小芳':88} } print(scores['第二组']['小芳'])
例三: 看看列表和字典相互嵌套的情况
# 最外层是大括号,所以是字典嵌套列表,先找到字典的键对应的列表,再判断列表中要取出元素的偏移量 students = { '第一组':['小明','小红','小刚','小美'], '第二组':['小强','小兰','小伟','小芳'] } print(students['第一组'][3]) #取出'第一组'对应列表偏移量为3的元素,即'小美' # 最外层是中括号,所以是列表嵌套字典,先判断字典是列表的第几个元素,再找出要取出的值相对应的键 scores = [ {'小明':95,'小红':90,'小刚':100,'小美':85}, {'小强':99,'小兰':89,'小伟':93,'小芳':88} ] print(scores[1]['小强']) #先定位到列表偏移量为1的元素,即第二个字典,再取出字典里键为'小强'对应的值,即99。
这一节重点是如何从列表/字典中取和添加元素,以及列表和字典的嵌套。