这一关,我们就会接触两种新的数据类型——列表和字典,你会发现,它们比我们学过的“整数、浮点数、字符串”更加高级,更有“包容性”。 为什么这么说呢?前面学的几种类型,每次赋值只能保存一条数据。如果我们需要使用很多数据的时候,就会很不方便。 而列表和字典的作用,就是可以帮我们存储大量数据,让计算机去读取和操作。
列表(list)的代码格式: student = ['张三','李四'] 列表名 赋值号 中括号 逗号 一个列表需要用中括号[ ]把里面的各种数据框起来,里面的每一个数据叫作“元素”。每个元素之间都要用英文逗号隔开。 列表很包容,各种类型的数据(整数/浮点数/字符串)无所不能包。 从列表提取单个元素 这就涉及到一个新的知识点:偏移量。列表中的各个元素,好比教室里的某排学生那样,是有序地排列的,也就是说,每个元素都有自己的位置编号(即偏移量)。 1.偏移量是从0开始的,而非我们习惯的从1开始;2.列表名后加带偏移量的中括号,就能取到相应位置的元素。 print(student[0])表示取第一个数据
从列表中取出多个元素 需要用到切片方式 如: list2 = [5,6,7,8,9] print(list2[:]) print(list2[2:]) print(list2[:2]) print(list2[1:3]) print(list2[2:4]) 原则是 :左右空,取到头;左要取,右不取 前半句:冒号左边空,就要从偏移量为0的元素开始取;右边空,就要取到列表的最后一个元素。 后半句:冒号左边数字对应的元素要拿,右边的不动 另外,我们要注意一个细节:偏移量取到的是列表中的元素,而切片则是截取了列表的某部分,所以还是列表
给列表增加/删除元素 过了一周,你正上着课呢,教导主任突然领了一个新学生“小美”,说是转校生,要插到你们班。这时,我们就需要用到append()函数给列表增加元素,append的意思是附加,增补。
用append()给列表增加元素,每次只能增加一个元素。 student = ['张三','李四','涂维'] student.append('凃双') append函数并不生成一个新列表,而是让列表末尾新增一个元素。而且,列表长度可变,理论容量无限,所以支持任意的嵌套
删除元素 students = ['×××','小红','小刚','小美'] del students[1] print(students)
事实上del语句非常方便,既能删除一个元素,也能一次删除多个元素(原理和切片类似,左取右不取)。
我们先介绍一下列表中的pop()函数,用于移除列表中的一个元素(默认最后一个元素),并且返回该元素的值。 可以将其理解为提取和删除的融合:①提取:取到元素,对列表没有影响;②删除:删除列表的元素。 而移除,则是同时做到取到元素,并且删除列表中的元素。 students = ['×××', '小红', '小刚'] for i in range(3): student1 = students.pop(0) students.append(student1) print(students)
数据类型:字典 众所周知,一个老师的日常就是出卷、改卷。这次期中考呢,×××、小红、小刚分别考了95、90和90分。 假如我们还用列表来装数据的话,我们需要新创建一个列表来专门放分数,而且要保证和姓名的顺序是一致的,很麻烦。 所以类似这种名字和数值(如分数、身高、体重等)两种数据存在一一对应的情况,用第二种数据类型——“字典”(dictionary)来存储会更方便 如 scores = {'×××':95,'小红':90,'小刚':90} 字典和列表有3个地方是一样的:1.有名称;2.要用=赋值;3.用逗号作为元素间的分隔符
而不一样的有两处:1.列表外层用的是中括号[ ],字典的外层是大括号{ }; 2.列表中的元素是自成一体的,而字典的元素是由一个个键值对构成的,用英文冒号连接。如'×××':95,其中我们把'×××'叫键(key),95叫值(value)。
这样唯一的键和对应的值形成的组合,我们就叫做【键值对】,上述字典就有3个【键值对】:'×××':95、'小红':90、'小刚':90 如果不想口算,我们可以用len()函数来得出一个列表或者字典的长度(元素个数),括号里放列表或字典名称
student = ['张三','李四','涂维'] print(len(student))
这里需要强调的是,字典中的键具备唯一性,而值可重复。也就是说字典里不能同时包含两个'×××'的键,但却可以有两个同为90的值。
现在,我们尝试将×××的成绩从字典里打印出来。这就涉及到字典的索引,和列表通过偏移量来索引不同,字典靠的是键。 scores = {'×××': 95, '小红': 90, '小刚': 90} print(scores['×××']) 这便是从字典中提取对应的值的用法。和列表相似的是要用[ ],不过因为字典没有偏移量,所以在中括号中应该写键的名称,即字典名[字典的键]。
给字典增加/删除元素
删除字典里键值对的代码是del语句del 字典名[键],而新增键值对要用到赋值语句字典名[键] = 值。
列表和字典的不同点 一个很重要的不同点是列表中的元素是有自己明确的“位置”的,所以即使看似相同的元素,只要在列表所处的位置不同,它们就是两个不同的列表
而字典相比起来就显得随和很多,调动顺序也不影响。因为列表中的数据是有序排列的,而字典中的数据是随机排列的。 这也是为什么两者数据读取方法会不同的原因:列表有序,要用偏移量定位;字典无序,便通过唯一的键来取值。 我们先来看第一个共同点:在列表和字典中,如果要修改元素,都可用赋值语句来完成
第二个共同点其实之前已经略有提及,即支持任意嵌套。除之前学过的数据类型外,列表可嵌套其他列表和字典,字典也可嵌套其他字典和列表
students = [['×××','小红','小刚','小美'],['小强','小兰','小伟','小芳']] 当我们在提取这种多级嵌套的列表/字典时,要一层一层地取出来,就像剥洋葱一样: 下面,介绍一种新的数据类型:元组(tuple)。 可以看到:元组和表格很相似,不过,它是用小括号来包的。 元组和列表都是序列,提取的方式也是偏移量,如 tuple1[1]、tuple1[1:]。另外,元组也支持任意的嵌套。
tuple1 = ('A','B') list2 = [('A','B'),('C','D'),('E','F')] print(tuple1[0]) print(list2[1][1])
输出 A D
循环 要实现“重复、自动地执行代码”,有两种循环语句可供我们选择使用:一种是for...in...循环语句,另一种是while循环语句。
比如班主任点名的例子: student = ['党志文','浦欣然','罗鸿朗','姜信然','居俊德','宿鸿福','张成和','林景辉','戴英华','马鸿宝','郑翰音','厉和煦','钟英纵','卢信然','任正真','翟彭勃','蒋华清','双英朗','金文柏','饶永思','堵宏盛','濮嘉澍','戈睿慈','邰子默'] for i in student: print(i+'在不在?') 列表,字典,字符串都可以充当此处的student 除了列表,字典,字符串三种数据类型,我们还可以遍历其他的数据集合。比如和for循环常常一起搭配使用的:range() 函数 num1=range(1,10) for i in num1: 取值不包括10 从1到9 使用range(x)函数,就可以生成一个从0到x-1的整数序列。
print(i)
for i in range(3): print('我很棒')
有了range()函数之后,当你想把一段代码固定重复n次时,就可以直接使用for i in range(n)解决问题。
range()函数还有一种用法,我们来直接运行体验一下:
for i in range(0,10,3): print(i)
这里range(0,10,3)的意思是:从0数到9(取头不取尾),数数的间隔为3
while循环 就是在一定条件下,执行一些动作。 如: a = 0 while a < 5: a = a + 1 print(a)
for循环和whlie循环最大的区别在于【循环的工作量是否确定】,for循环就像空房间依次办理业务,直到把【所有工作做完】才下班。但while循环就像哨卡放行,【满足条件就一直工作】,直到不满足条件就关闭哨卡
所以说,当我们【工作量确定】的时候,我们就可以让for循环来完成重复性工作。反之,要【工作量不确定时】可以让while循环来工作:
用数值做判断 ---------》布尔值 True False 计算机的逻辑判断结果要不为真 True 要不为假 False if False: print('if False')
if True: print('if True')
print(5>3) 输出为True 即为真 while True -------------->此时就进入了死循环 ,因为条件一直成立 print('ok')
直接用数值做运算 if 1: --------->其实,整数1在这里就是作为一个条件,被判断为真(True)。这就是数值本身作为一个条件,被判断真假的情况。
print('ok')
print(bool(1))
在Python中被判定为假,比如False、0、'' (空字符串)、空列表、none等等。假的东西是有限的,那么除了假的,其他就都是真的。比如上一个例子中出现的整数1,就是真的。 至于None,它代表的是【空值】,自成一派,数据类型是NoneType。要注意它和0的区别,0是整数0,可并非什么都没有 我们可以使用bool()函数来查看一个数据会被判断为真还是假。这个函数的用法与type()函数相似(还有印象吧~),在bool()函数括号中放入我们想要判断真假的数据,然后print出来即可。
布尔值之间的运算 and、or、not、in、not in五种运算
in】的意思是“判断一个元素是否在一堆数据之中”,【not in】反之
list = [1,2,3,4,5] a = 1
做一次布尔运算,判断“a是否在列表list之中”
print(bool(a in list)) print(bool(a not in list)) 如果涉及到的数据集合是字典的话,【in】和【not in】就可以用来判断字典中是否存在某个【键】:
i = 5 while i: print('把这句话打印5遍') i = i-1
这种实现方式比用下面要好,计算次数减少了 i = 0 while i<5: print('把这句话打印5遍') i = i+1 循环里的四种新语句 我们先来看看break语句。break的意思是“打破”,是用来结束循环的,一般写作if...break。它的写法长这样:
break语句搭配for循环
for...in...: ... if ...: break
break语句搭配while循环
while...(条件): ... if ...: break 在这里,if...break的意思是如果满足了某一个条件,就提前结束循环。记住,这个只能在循环内部使用。
小小地提醒你,break前面一共缩进了【8个空格】
continue语句
continue的意思是“继续”。这个子句也是在循环内部使用的。当某个条件被满足的时候,触发continue语句,将跳过之后的代码,直接回到循环的开始。
pass语句
pass语句就非常简单了,它的英文意思是“跳过”。 a = int(input('请输入一个整数:')) if a >= 100: pass else: print('你输入了一个小于100的数字')
这个代码的意思是:当a>=100的时候,跳过,什么都不做。其他情况,也就是a<100的时候,执行一个print语句。
else语句----》用在循环语句后
最后一种else语句,我们在条件判断语句见过【else】,其实,else不但可以和if配合使用,它还能跟for循环和while循环配合使用
用一句话总结,当循环中没有碰到break语句,就会执行循环后面的else语句,否则就不会执行。