计算机利用数据有三种方式:
- 直接使用
- 计算和加工
- 做判断
对于编程新手来讲,掌握主要的数据类型是重中之重。
学习了两种新的数据类型——列表和字典,你会发现,它们比之前学过的“整数、浮点数、字符串”更加高级,更具有“包容性”。
前面学的几种类型,每次赋值只能保存一条数据。如果需要使用很多数据的时候,就会很不方便。
而列表和字典的作用,就是可以帮我们存储大量数据,让计算机去读取和操作。
列表
- 什么是列表
一个列表用中括号[]把里面的各种数据框起来,里面的每一个数据叫做元素。每个元素之间用英文逗号隔开。
list = ['李某', 20, 1.82] #列表很包容,各种类型数据(整数/浮点数/字符串)无所不能包
print(list)
- 从列表提取单个元素
这会涉及到一个新的知识点:偏移量。
列表中各个元素有序的排列,每个元素有自己的位置编号(即偏移量)。
偏移量是从0开始的,而不是从我们习惯的1开始;列表名后加带偏移量的中括号就能取到相应位置的元素。
所以我们通过偏移量来对列表进行索引(可理解为搜索定位),读取我们要找的元素。
- 从列表提取多个元素
用冒号来截取列表元素的操作叫作切片,顾名思义,就是将列表的某个片段拿出来处理。这种切片的方式可以让我们从列表中取出多个元素。
list = [5,6,7,8,9] print(list[:]) # 打印出[5,6,7,8,9] print(list[2:]) # 打印出[7,8.9] print(list[:2]) # 打印出[5,6] print(list[1:3]) #打印出[6,7] print(list[2:4]) #打印出[7,8]
列表切片口诀:左右空,取到头;左要取,右不取。
冒号左边空,就要从偏移量为0的元素开始取;右边空,就要取到列表的最后一个元素。
冒号左边数字对应的元素要拿,右边的不动。
注:偏移量取到的是列表中的元素,而切片则是截取了列表的某部分,所以还是列表。
- 给列表增加/删除元素
用append()函数给列表增加元素,每次只能增加一个元素。append()函数后的参数只要满足数量是一即可(单个列表也会视作一个元素)。
append()函数并不生成一个新列表,而是在列表末尾新增一个元素,列表长度可变,理论上容量无限,所以支持任意的嵌套。
有一个方法可以根据索引而不是值从列表中删除一个元素:del语句。
这跟pop()方法不同,后者会返回一个值。del语句也可以用于从列表中删除片段或清除整个列表。也可用于删除整个变量。
字典
- 什么是字典
字典和列表有三处共同之处:有名称;用=赋值;用逗号作为元素间的分隔符。
字典和列表不同有两处:列表外层用中括号[],字典外层用大括号{};列表中的元素是自成一体的,而字典的元素是由一个个键值对构成的,用英文冒号连接,分为键key和值value。
注:字典中的键具有唯一性,而值可重复。
- 从字典中提取元素
scores = {'小明': 95, '小红': 90, '小刚': 90} print(scores['小明'])
和列表相似,提取对应值要用[],不过因为字典没有偏移量,所以在中括号内应写上键的名称。
- 给字典增加/删除元素
删除字典键值对的代码是del语句:del 字典名[键],而新增键值对要用到赋值语句:字典名[键] = 值。
列表和字典的异同
它们作为Python中能存储多条数据的数据类型,有许多共同点,也有需要注意的不同点。
- 不同点
列表元素有自己明确的“位置”,所以即使看似相同的元素,只要在列表中所处位置不同,它们就是两个不同的列表。
students1 = ['小明','小红','小刚'] students2 = ['小刚','小明','小红'] print(students1 == students2)
字典相比起来就随和很多,调动顺序也不影响。因为列表中的数据是有序排列的,而字典中的数据是随机排列的。
scores1 = {'小明':95,'小红':90,'小刚':100} scores2 = {'小刚':100,'小明':95,'小红':90} print(scores1 == scores2)
这也是为什么两者数据读取方法会不同的原因:列表有序,要用偏移量定位;字典无序,通过唯一的键来取值。
- 相同点
第一个相同点:在列表和字典中,如果要修改元素,都可用赋值语句来完成。
list = ['小明','小红','小刚','小美']
list[1] = '小蓝'
print(list)dict = {'小明':'男'}
dict['小明'] = '女'
print(dict)
scores = {'小明':95,'小红':90,'小刚':90} #del scores['小刚'] #如果只是想修改键里面的值,可不需要del语句 scores['小刚'] = 92
第二个相同点:支持任意嵌套。除之前学过的数据类型外,列表可嵌套其他列表和字典,字典也可嵌套其他字典和列表。
第一种情况:列表嵌套列表。
students = [['小明','小红','小刚','小美'],['小强','小兰','小伟','小芳']]
当我们在提取这种多级嵌套的列表/字典时,要一层一层地取出来,就像剥洋葱一样。
我们确定了小芳是在students[1]的列表里,小芳是students[1]列表里的第三个元素,所以要取出小芳,代码可以这么写:
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。