一、上堂回顾
1.默写题目
1.判断一个数是否是质数
2.创建一个非空元组,遍历其中的元素
3.创建一个非空字典,至少采用两种方式遍历该字典
dict1 = {1:10,2:20,3:30} #1 for key in dict1L: print(key,dict1[key]) #2. for key in dict1.keys(): print(key,dict1[key]) #3 for value in dict1.values(): print(value) #4. for i,key in enumerate(dict1): pass #5. for key,value in dict1.items(): print(key,value)
2.知识点回顾
1.break和continue,pass
重点掌握break的使用
掌握break和continue的区别
Number
int() float()
随机数功能
random.choice(列表)
random.randrange(start,end,step)
random.random() 0~1
tuple
重点掌握list
dict【掌握】
字典的使用和key的特点
遍历
二、Set集合
1.概念
Python中的集合跟数学上的集合是一致的
特点;不允许有重复元素,可以进行交集,并集或者差集的计算
set和dict类似,和dict的区别在于:set相当于只是存储了key的集合
本质:无序且无重复元素的集合
2.创建
代码演示:
#注意:set的创建没有特有的符号,主要是通过list,tuple,dict进行创建 #格式:集合名 = set(list或者tuple或者dict) 类似于list() tuple() #list s1 = set([1,43,4,546,5,43,1,4]) print(s1) #注意:重复元素在set中会被自动过滤掉 #tuple s2 = set((34,54,54,5,56)) print(s2) #dict #注意:使用dict创建set的时候,只是将key作为set的元素进行创建 s3 = set({"zhangsan":20,"lisi":409,"jack":5748}) print(s3)
3.操作
3.1添加
代码演示:
#1.添加 #1.1add():在set的末尾添加元素 s1 = set([1,2,3,4,5]) print(s1) s1.add(6) print(s1) #注意:如果需要添加的元素已经存在的话,则添加失败 s1.add(3) print(s1) #print(s1.add(3)) #print(s1.add(7)) #在集合中添加list----->不能 #s1.add([7,8,9]) #TypeError: unhashable type: 'list' #在集合中添加tuple---->能 s1.add((7,8,9)) print(s1) #在集合中添加dict---->不能 #s1.add({10:1,20:2}) #TypeError: unhashable type: 'dict' #print(s1) #1.2update() 插入【打碎添加,类似于extend的使用】 s2 = set([1,2,3,4,5]) print(s2) #update不能他添加单个元素 #s2.update(6) #TypeError: 'int' object is not iterable s2.update([6,7]) print(s2) s2.update((8,9)) print(s2) s2.update({10:1,20:2}) print(s2) s2.update("good") print(s2) #注意区分add()和update()
3.2删除
代码演示:
#2.删除 s3 = set([54,64,6,6]) s3.remove(64) print(s3)
3.3遍历
代码演示:
3.遍历 #注意:set中是没有索引 for element in s3: print(element) for i,element in enumerate(s3): print(i,element)
3.4交集和并集
代码演示:
#4.交集和并集 s4 = set([43,54,5,6]) s5 = set([545,4,65,6,75]) #交集:&【按位与】 and r1 = s4 & s5 print(r1) print(type(r1)) #并集:|【按位或】 or r2 = s4 | s5 print(r2)
三、简单算法
代码演示:
list1 = [43,4,34,23,3,87,87] #方式一 #定义一个变量,记录最大值, maxValue = list1[0] #遍历列表,用maxValue和列表中的其他元素 进行一一比对 for num in list1: if num > maxValue: #给maxValue重新赋值 maxValue = num print(maxValue) #方式二 maxValue = list1[0] maxIndex = 0 for i in range(1,len(list1)): if list1[i] > maxValue: maxValue = list1[i] maxIndex = i print(maxValue,maxIndex)
1.排序
需求:求列表中的最大值
max()
1.1冒泡排序
排序思路:比较两个相邻下标所对应的元素,如果符合条件则交换位置
举例:列表中的元素从左到右存储,经过第一次的冒泡排序之后,【以升序为例】,最大值出现在最右边
规律:见图
代码演示:
list1 = [43,545,4,124,34,323,54] #冒泡排序 #外层循环:控制比较的轮数 for out in range(0,len(list1) - 1): #内层循环:控制每一轮中比较的次数,兼顾参与比较的下标 for inner in range(0,len(list1) - 1 - out): #以升序为例,如果符合条件,则两个相邻的元素交换位置 if list1[inner] > list1[inner + 1]: list1[inner],list1[inner + 1] = list1[inner + 1],list1[inner] print(list1)
1.2选择排序
排序思路:固定一个下标,然后使用这个下标对应的元素和列表中其他的元素进行依次比对,如果符合条件则交换位置
举例:列表中的元素从左到右存储,经过第一次的选择排序之后,【以升序为例】,最小值出现在最左边
规律:见图
代码演示:
list1 = [43,545,4,124,34,323,54] #选择排序 #外层循环:控制比较的轮数 for out in range(0,len(list1) - 1): #内层循环:控制每一轮中比较的次数,兼顾参与比较的下标 for inner in range(out + 1,len(list1)): #以升序为例,符合条件则交换位置 if list1[out] > list1[inner]: list1[out],list1[inner] = list1[inner],list1[out] print(list1)
2.查找
2.1顺序查找
查找思路:遍历指定列表,依次将要查找的数据和列表中的元素进行依次比对,如果相等,则输出索引
代码演示:
#顺序查找 list1 = [43,545,4,124,34,323,54] keyword = 124 #遍历列表 for i in range(len(list1)): #和列表中的元素进行比对 if keyword == list1[i]: print(i) #求一个列表中的第二大元素的下标 #思路:1.拷贝列表 2.对原列表排序,得到第二大值 3.在副本列表中进行顺序查找
2.2二分法查找
查找思路:
a.前提条件:必须是排好序的列表【局限性】
b.特点:通过折半来缩小查找范围,提高查找效率【举例:假设有一个列表,升序的,如果keyword大于中间下标对应的元素,则直接在后半部门查找】
代码演示:
#二分法查找 #前提:列表必须是有序的【以升序为例】 list1 = [23,43,45,67,88,90,100] #list1.reverse() #print(list1) #[100, 90, 88, 67, 45, 43, 23] #待查找的数据 key = 90 #定义变量,用于记录下标 #下标的最小值 left = 0 #下标的最大值 right = len(list1) - 1 #当查找的过程中,left和right是根据不同的条件进行慢慢的靠拢,当left == right的时候,说明整个列表被查找了一遍 #如果没有获取到key,则说明key在列表中是不存在的 while left <= right: #计算中间的下标【循环没执行一次,middle都需要被重新计算一次】 middle = (left + right) // 2 #将待查找的数据和中间下标对应的元素进行比较 if key > list1[middle]: #更改区间 left = middle + 1 elif key < list1[middle]: #更改区间 right = middle - 1 else: print("元素的下标为:",middle) #会出现这种情况,当left<right的时候,已经查找到了元素,此时则需要强制停止循环 break
四、String字符串
1.概念
字符串就是由若干个字符组成的有限序列
字符:字母,数字,特殊符号,中文
表示形式:采用的单引号或者双引号
注意:字符串属于不可变实体
2.创建字符串
代码演示:
str1 = "hello" str2 = 'hello' str3 = 'h' #Python不支持单字符类型,单字符在Python中也是一个字符串
3.字符串运算
代码演示:
#字符串的运算 #1.字符串连接【拼接】 :+ #注意:+只能用于字符串和字符串之间的拼接 s1 = "welcome " s2 = "to china" print(s1 + s2) print(s1) print(s2) #2.重复输出字符串 :* s3 = "good" print(s3 * 3) print(s3,s3,s3) #注意:不管是+还是*,运算结束之后都是生成了一个新的字符串 #3.获取字符串中的某个字符 #和list以及tuple类似,通过索引的方式访问字符串中的字符 #访问方式:字符串名[索引] s4 = "ahjfahdgjag" #获取值 print(s4[2]) #获取一个字符串 的长度 print(len(s4)) #遍历字符串:类似于list和tuple的遍历 for c in s4: print(c) for i in range(len(s4)): print(s4[i]) for i,c in enumerate(s4): print(i,c) #字符串的本质:在底层维护了一个由不同的字符组成的元组 ('a','h','j'....) #s4[2] = 'o' #TypeError: 'str' object does not support item assignment #4.截取字符串【切片】 str1 = "hello world" #截取指定范围的字符串【子字符串】 包头不包尾的操作 print(str1[6:11]) #从开头截取到指定位置 print(str1[:11]) #从指定位置截取到末尾 print(str1[6:]) str2 = "abc123456" print(str2[2:5]) #c12 print(str2[2:]) #c123456 print(str2[2::2]) #[start:end:step] c246 print(str2[::-1]) #step为正数,则从左向右获取,如果未负数,则从右向左获取 654321cba print(str2[-3:-1]) #45 #5.判断一个字符串中是否包含指定字符:成员运算符 str3 = "you are a good man" print("good" in str3) print("good" not in str3)
4.格式化字符串
通过%来改变后面字母的含义,%被称为占位符
%s:字符串【对象】
%d:整型
%f:浮点型,可以指定小数点后的位数【精度】
代码演示:
print("hello") num = 10 str1 = "hello" print(num,str1) print("num = ",num,"str1 = ",str1) #格式化 print("%d + %s" %(num,str1)) f = 12.34545 print("num = %d,str1 = %s,f = %f"%(num,str1,f)) print("num = %d,str1 = %s,f = %.2f"%(num,str1,f)) #注意:%.nf,如果n省略,则表示取整,如果n>=1,则表示保留小数点后n位,会进行四舍五入的操作
5.转义字符
通过\改变后面字母的含义
\t:相当于按下tab键
\n:换行符
代码演示:
#打印反斜杠\ str1 = "\\" print(str1) #打印单引号 str2 = "'" print(str2) str2 = '\'' #打印"hello" print("\"hello\"") str3 = "hi\thello" print(str3) str4 = "hi\nhello" print(str4) #如果字符串内部有很多的换行,用\n写在一行里面不好阅读 str5 = "today\nis\na\ngood\nday" print(str5) #简化 str6 = """today is a good day """ print(str6) #C:\Users\Administrator\Desktop\XA-Python1804\Day6\视频 str7 = "C:\\Users\\Administrator\\Desktop\\XA-Python1804\\Day6\\视频" print(str7) #为了简化,Python允许使用r"xxxxx',表示字符串内部的字符默认不需要手动转义 str8 = r"C:\Users\Administrator\Desktop\XA-Python1804\Day6\视频" print(str8)
6.字符串功能
代码演示:
#1.字符串和整数之间的转换 #int() str() #eval(str):将str转换为有效的表达式,参与运算,并返回运算结果 num1 = eval("123") print(num1) print(type(num1)) print(int("123")) print(eval("+123")) print(int("+123")) print(eval("-123")) print(int("-123")) print(eval("12+3")) #print(int("12+3")) #ValueError: invalid literal for int() with base 10: '12+3' print(eval("12-3")) #print(int("12-3")) #ValueError: invalid literal for int() with base 10: '12-3' #总结;eval():转换为数学运算 int():转换为整数 #2.统计子字符串在原字符串中出现的次数:count #count(str[,start,end]) str1 = "good good good" c = str1.count("good") print(c) #3.大小写字母转换 #lower():将字符串中的大写字母转换为小写字母 str2 = "Tomorrow is Better" newStr1 = str2.lower() print(newStr1) print(str2) #upper():将小写字母转换为大写 print(str2.upper()) #swapcase():将大写转换为小写,将小写转换为大写 print(str2.swapcase()) #capitalize(): 首个单词的首字母大写,其他全部小写 print(str2.capitalize()) #title():每个单词的首字母大写 print(str2.title())