一、上堂回顾
1.默写题目
1.求1~100之间能被6整除的数的和
2.打印九九乘法表
2.知识点回顾
1.运算符
逻辑运算符:and or not
短路原则
成员运算符:in not in
身份运算符:is is not
比较的地址,类似于id()
区别==的作用
2.循环语句
a.初始化表达式
b.条件表达式
c.循环体
d.循环之后的操作表达式
死循环的写法
else分支【了解】
嵌套循环【掌握,工作原理】
二、list列表
1.概念
变量:使用变量存储数据,但是,变量存储数据每次只能存储一个数据
问题:如果要一次性存储多个数据的,该怎么做?
#需求:存储5个人的年龄,求年龄的平均值 age1 = 10 age2 = 15 age3 = 30 age4 = 17 age5 = 24 avg = (age1 + age2 + age3 + age4 + age5) / 5
解决办法:采用列表
作用:相当于一个容器,可以同时存储多个数据
本质:列表是一种有序的集合
说明:有序指的是有顺序【存储的存放顺序和在内存中存储的顺序是相同的】
2.创建列表
num = 10
语法:
变量名 = 列表
列表名称 = [数据1,数据2.。。。。]
说明:
a.通过[]定义列表
b.列表中存储的数据被称为元素
c.列表中的元素会从头到尾进行编号,编号从0开始,这个编号被称为索引,角标或者下标
d.索引的取值范围:0~列表中元素的个数 - 1 【0~列表的长度- 1】
e.超过索引的范围:列表的索引越界
代码演示:
#1.创建空列表 #注意:列表的命名:一般情况下,使用listXxx lxxx,不要直接使用list list1 = [] print(list1) #2.创建一个有元素的列表 list2 = [10,30,54,5,6] print(list2) #3.思考问题:在同一个列表中能不能存储不同类型的数据?---->能 list3 = [True,None,"hello",10] print(list3) #注意:将需要存储的数据存储到列表中,不需要考虑列表的大小,如果数据量很大的情况下,在进行存储数据的时候,列表会自动扩容
3.列表中元素的访问
3.1取值
代码演示:
#元素的访问 #1.取值 #语法:列表名[索引] #索引:0~4 list1 = [543,5,46,56,6] num1 = list1[2] print(list1[2]) print(num1) #列表索引越界 #print(list1[-10]) #IndexError: list index out of range #print(list1[5])
3.2替换值
代码演示:
#2.替换值 #语法:列表名[索引] = 新值【列表中的元素本质上是一个变量,所以替换之的操作其实就是给变量重新赋值】 list1[2] = 100 print(list1[2])
4.列表的操作
代码演示:
#列表的操作 #1.列表组合:+ list1 = [54,5,45,4] list2 = ["abc","fhj","ghfjg"] #列表的组合并没有修改原来的列表,而是生成了一个新的列表 list3 = list1 + list2 print(list3) print(list1) print(list2) #2.列表元素重复:* #2.1列表中可以存储重复元素 l1 = [20,20,40,45,54,20] print(l1) #2.2 l2 = [10,20,30] l3 = l2 * 3 print(l3) #3.判断元素是否在列表中:成员运算符[int not in] #注意:成员运算符运算的结果为布尔值 #一般结合if语句使用 l4 = [34,54,56,"anc"] print(34 in l4) print(34 not in l4) print(100 in l4) print(100 not in l4) """ True False False True """ #4.列表的截取【切片】 #4.1截取指定的区间:列表名[开始索引:结束索引] #特点:涉及到区间,包头不包尾 前闭后开区间:[2,4) l5 = [34,54,56,"anc",5,65,76,7677] print(l5[2:4]) #4.2从开头截取到指定位置 print(l5[0:5]) print(l5[:5]) #4.3从指定位置截取到结尾 print(l5[3:7]) print(l5[3:]) #注意;如果要取到最后一个元素,可以超过索引的范围,在这种情况下不会报错 print(l5[3:20])
5.列表的功能
语法:列表名.功能名()
#1.添加元素 #1.1 append():在列表元素的末尾追加元素 list11 = [10,20,30] print(list11) #追加单个元素 list11.append(40) print(list11) #追加多个元素 #list11.append(50,60) #错误演示 #注意:使用append功能,追加多个元素,不能直接追加,通过列表的形式追加 list11.append([50,60]) print(list11) #1.2 extend():扩展,在列表的末尾添加元素 list12 = [10,20,30] print(list12) #追加单个元素 #list12.extend(40) #错误演示:extend不能直接添加单个元素 # #iterable:可迭代的 iterator #追加多个元素 #注意:使用extend添加多个元素,仍然采用列表的方式添加,但是,实际上添加的只是元素【打碎添加】 list12.extend([50,60]) print(list12) print("~~~~~~~~") #1.3 insert() ;插入,在指定索引处插入元素 #格式:insert(索引,插入的数据) list13 = [10,20,30] print(list13) list13.insert(2,40) print(list13) #注意:插入一一个列表,将整个列表插入到原列表中 list13.insert(1,[50,60]) print(list13) #2.删除元素 #2.1 pop(索引) ;弹出,移除列表中指定索引处的元素 list21 = [10,20,30,40,50,60] print(list21) #pop默认移除的是最后一个元素,得到的结果为被移除的元素 result1 = list21.pop() print(list21) print(result1) #移除指定位置的元素 list21.pop(2) print(list21) #2.2 remove(元素) :移除,特点:移除的是列表中的元素【在列表中从0开始能够匹配到的第一个元素】 list22 = [10,20,30,40,50,60] print(list22) list22.remove(10) #等价于list22.pop(0) print(list22) #需求:移除列表中所有的数字10 list23 = [10,20,30,40,50,60,10,10,10,10,10,10] """ list23.remove(10) print(list23) list23.remove(10) print(list23) list23.remove(10) print(list23) """ num = 0 element = 10 cou = list23.count(element) while num < cou: list23.remove(element) print(list23) num += 1 print(list23) #2.3 clear():清除,清除列表中的所有元素,原列表变为空列表 list24 = [10,20,30,40,50,60,10,10,10,10,10,10] list24.clear() print(list24) #3.获取 #语法:功能名(列表名) #3.1 len() length,获取列表的长度【获取列表中元素的个数】 list31 = [10,20,30,40,50,60,10,10,10,10,10,10] length = len(list31) #3.2 max();获取列表中元素的最大值 min() 最小值 print(max(list31)) print(min(list31)) #3.3 index() :索引,从列表中匹配到的第一个元素对应的索引值 inx1 = list31.index(10) print(inx1) #3.4 count();个数,查找指定元素在列表中出现的次数 c = list31.count(10) print(c) #4.其他 #4.1 reverse() 反转,将列表中的元素倒序输出 list41 = [10,20,30,40,50,60,10,10,10,10,10,10] list41.reverse() print(list41) #4.2 sort() 排序,默认为升序排序,注意:在列表的内部操作 #升序 list41.sort() print(list41) #降序 list41.sort(reverse=True) print(list41) #sorted() 排序,默认为升序排序,注意:生成一个新的列表 list42 = [10,20,30,40,50,60,10,10,10,10,10,10] #升序 newList1 = sorted(list42) print(list42) print(newList1) #降序 newList2 = sorted(list42,reverse=True) print(newList2) #按照长度排序 list43 = ["fhjdhf","g","gfg"] newList3 = sorted(list43,key=len) print(newList3) #4.3 拷贝【面试题】 #浅拷贝 #深拷贝 #a.从内存的角度 #浅拷贝:引用【栈空间】 list44 = [23,45,98] list45 = list44 list45[1] = 100 print(list44) print(list45) print(id(list44) == id(list45)) #深拷贝:内存【实体,堆空间】 list51 = [23,45,98] list52= list51.copy() list52[1] = 100 print(list51) print(list52) print(id(list51) == id(list52)) #b.从内容的角度
5.二维列表
本质:一维列表,只不过列表中的元素仍然是一个列表
掌握:二维列表的遍历
三、for-in循环
1.用法
语法:
for 变量名 in 列表:
循环体
功能:for循环主要用于遍历列表【遍历:指的是依次访问列表中的每一个元素,获取每个元素值】
说明:按照顺序获取列表中的每个元素,会赋值给变量,执行循环体,循环的次数取决于列表的长度
代码演示:
#需求:将列表中的元素全部打印出来 list1 = ["and",567,"abc"] print(list1[0]) print(list1[1]) print(list1[2]) #使用for遍历列表,for循环主要结合成员运算符使用 for element in list1: print(element) #用while实现 num = 0 while num < len(list1): print(list1[num]) num += 1 #注意:在遍历列表的时候,for循环主要操作的是元素,while循环主要操作的是索引 #else分支:for遍历完列表之后,最后才执行else分支 for x in [43,545,4656,5]: print(x) else: print("over")
2.列表生成器
random.choice(range(100))
range([start,]end[,step]) 注意:[]表示start和step可写可不写
start:开始数字
end:结束数字
step:步长
注意:start默认为0,step默认为1
功能:生成具有一定规律的列表
代码演示:
#问题:for x in 列表,直接操作的是元素,for循环能不能操作列表中的索引?----》列表生成器【生成一个和索引有关的列表】 list1 = [43,65,6,576,7] #操作元素 for x in list1: print(x) #操作索引 """ range([start,]end[,step]) 例如: range(100):生成一个0~99的整数列表【不包含100】 range(1,100):生成一个1~99的整数列表 range(1,100,2):在1~99的范围内,生成一个奇数列表 """ indexList = range(0,len(list1)) for i in indexList: print(i) print(list1[i])
练习:
#1.计算1~100之间所有整数的和 sum1 = 0 for x in range(1,101): sum1 += x print(sum1) #2.计算1~100之间所有偶数的和 #方式一 sum1 = 0 for x in range(0,101,2): sum1 += x #方式二 sum1 = 0 for x in range(1,101): if x % 2 == 0: sum1 += x
3.遍历列表
代码演示:
list1 = [54,5,465,5] #1.直接操作的是元素 for element in list1: print(element) #2.操作索引 for i in range(len(list1)): print(i,list1[i]) #3.同时遍历索引和元素 #enumerate;枚举【类似于一个容器】 for i,element in enumerate(list1): print(i,element)
4.嵌套for循环
代码演示:
#二维列表的遍历 list2 = [[23,54,64,6],[54,4,65],[54,65,657]] subList = list2[1] print(subList) print(subList[1]) print(list2[1][1]) #嵌套for循环 for subList in list2: for element in subList: print(element) #打印九九乘法表 i = 1 while i <= 9: j = 1 while j <= i: print("%dx%d=%d"%(j,i,i*j),end=" ") j += 1 print("") i += 1 #外层循环:控制行 for i in range(1,10): #内层循环:控制列 for j in range(1,i + 1): print("%dx%d=%d" % (j, i, i * j), end=" ") print("")