Python开发【第二章】:补充
一.字符串方法讲解:
1 #---------字符串各种方法---------- 2 s = "Hello world!" 3 4 #1.swapcase():大小写互换 5 print(s.swapcase()) 6 #输出:hELLO WORLD! 7 8 #2.capitalize():返回第一个字符为大写,其他字符为小写 9 #源码: 10 ''' 11 Return a capitalized version of S, i.e. make the first character 12 have upper case and the rest lower case. 13 ''' 14 print(s.capitalize()) 15 #输出:Hello world! 16 17 #3.casefold():返回所有字符为小写 18 #源码: 19 ''' 20 Return a version of S suitable for caseless comparisons. 21 ''' 22 print(s.casefold()) 23 #输出:hello world! 24 25 #4.center():参数为一个数字和一个字符,在这个数字为长度的范围内,字符串居中,两边由那个字符补足 26 print(s.center(50,'#')) 27 #输出:###################Hello world!################### 28 29 #5.count():统计字符串中某个字符的个数,也可以从一个范围开始 30 #如:print(s.count('o',0,5)) 输出为1 31 print(s.count('o')) 32 #输出:2 33 34 #6.endswith():判断字符串以什么结尾 35 print(s.endswith('d!')) 36 #输出:True 37 38 #7.expandtabs():扩展tab键 39 s2 = 'a\tb' #\t就是tab键 40 print(s2.expandtabs()) 41 #输出:a b #tab键默认8个空格 42 print(s2.expandtabs(20)) #tab键可以指定空格 43 #输出:a b 44 45 #8.find():返回字符在字符串中的位置,没有则返回-1;也可以从一个范围开始 46 #如:print(s.find('o',0,3)) 输出:-1 47 print(s.find('o')) 48 #输出:4 49 print(s.find('sdaf')) 50 #输出:-1 51 52 #9.format():字符串格式化输出 53 #方法一: 54 s3 = 'my name is {0},i am {1} years old' 55 print(s3.format('Mm',18)) 56 #输出:my name is Mm,i am 18 years old 57 58 #方法二: 59 s4 = 'my name is {name},i am {age} years old' 60 print(s4.format(name = 'Mm',age = 18)) 61 #输出:my name is Mm,i am 18 years old 62 63 #10.isalnum():是否为阿拉伯数字或字符 64 print('22'.isalnum()) 65 #输出:True 66 67 #11.isalpha():是否为字符 68 print('mm'.isalpha()) 69 #输出:True 70 71 #12.isdecimal():是否是个数字 72 73 #13.isdigit():是否是个数字 74 75 #14.isidentifier():是否是个合法的变量名 76 77 #15.islower():是否都是小写 78 79 #16.isnumeric():是否都是数字 80 81 #17.isprintable():是否是可打印的(文本文件或者是字节型文件) 82 83 #18.issapce():判断是否是空格 84 print(' '.isspace()) 85 #输出:True 86 87 #19.istitle():判断是不是标题 88 89 #20.isupper():判断是不是都是大写 90 91 #21.join():列表元素以一种方式,如下例中的'*'连接成字符串 92 names = ['mm','mumu','tt'] 93 print('*'.join(names)) 94 #输出:mm*mumu*tt 95 96 #22.ljust():右填充 97 print(s.ljust(50,'*')) 98 #输出:Hello world!************************************** 99 100 #23.rjust():左填充 101 print(s.rjust(50,'#')) 102 #输出:######################################Hello world! 103 104 #24.lower():将字符串改成小写 105 print(s.lower()) 106 #输出:hello world! 107 108 #25.upper():将字符串改成大写 109 print(s.upper()) 110 #输出:HELLO WORLD! 111 112 #26.strip():去掉空格或换行 113 114 #27.lstrip():只去掉左边空格或换行 115 116 #28.rstrip():只去掉右边空格或换行 117 118 #29.maketrans():生成对应表 119 #30.translate():翻译 120 str_in = 'abcdef' 121 str_out = '!@#$%^' 122 123 table = str.maketrans(str_in,str_out) 124 125 print(table) 126 #输出:{97: 33, 98: 64, 99: 35, 100: 36, 101: 37, 102: 94} 127 128 print(s.translate(table)) 129 #输出:H%llo worl$! 130 131 #31.partition():一个字符串以其中的字符分割成三段 132 print(s.partition('o')) 133 #输出:('Hell', 'o', ' world!') 134 135 #32.rpartition():一个字符串以其中的字符分割成三段,从右边开始寻找 136 print(s.rpartition('o')) 137 #输出:('Hello w', 'o', 'rld!') 138 139 #33.replace():替换,不指定一个数字将全部换掉 140 print(s.replace('o','*',1)) 141 #输出:Hell* world! 142 143 #34.rfind():从右边开始找,找不到的时候为-1 144 print(s.rfind('l')) 145 #输出:9 146 147 #34.rindex():从右边找,当找不到的时候报错 148 149 #35.split(): 默认以空格来分割字符串为列表 150 print(s.split()) 151 #输出:['Hello', 'world!'] 152 153 #36.rsplit():从右边开始分 154 #如: 155 print(s.split('o',1)) 156 print(s.rsplit('o',1)) 157 #输出: 158 # ['Hell', ' world!'] 159 # ['Hello w', 'rld!'] 160 161 #37.splitlines():按行来分 162 t = 'a\nb\nmm\nc' 163 print(t.splitlines()) 164 #输出:['a', 'b', 'mm', 'c'] 165 166 #38.startswith():判断以什么开始 167 print(s.startswith('He')) 168 #输出:True 169 170 #39.zfill():字符串变成一个长度的,不够用0填充 171 print(s.zfill(40)) 172 #输出:0000000000000000000000000000Hello world!
二.元组类型:
(1)特性:
1.不可变
2.元组本身不可变,如果元组中包含其他可变元素,这些可变元素可以改变
(2)功能:
1.index
2.count
3.切片
(3)使用场景:
1.显示的告知别人,此处数据不可修改
2.数据库连接配置信息等
三.hash函数:
(1)定义:将任意长度的消息压缩到某一固定长度的消息摘要的函数
(2)特征: hash值的计算过程是依据这个值的一些特征计算的,这就是要求hash的值必须固定,因此被hash的值必须是不可变的。
(3)用途:
1.文件签名
2.md5加密
3.密码验证
四.字典类型:
(1)特性:
1.key-value结构
2.key必须可hash,且必须为不可变数据类型,必须唯一
3.可存放任意多个值,可修改,可以不唯一
4.无序
5.查找速度快(key转换成hash数字,然后排序,通过二分法来查找,最多2的多少次幂,但是hash不是这种方法,但是更快)
(2)方法:
1 info = { 2 'stu001':'mm', 3 'stu002':'tt', 4 'stu003':'mumu' 5 } 6 7 方法: 8 #1.clear():清空字典 9 10 #2.copy():类似于列表的深浅copy 11 12 #3.values(): 13 print(info.values()) 14 #输出:dict_values(['mm', 'tt', 'mumu']) 15 16 #4.keys(): 17 print(info.keys()) 18 #输出:dict_keys(['stu001', 'stu002', 'stu003']) 19 20 #5.items(): 21 print(info.items()) 22 #输出:dict_items([('stu001', 'mm'), ('stu002', 'tt'), ('stu003', 'mumu')]) 23 24 #6.updates():两个字典组合起来,当有相同的key时,更新的value会替换掉原有的value 25 dic1 = {1:2,2:3,'stu003':['mumu','small dog']} 26 info.update(dic1) 27 print(info) 28 #输出:{'stu001': 'mm', 'stu002': 'tt', 'stu003': ['mumu', 'small dog'], 1: 2, 2: 3} 29 30 #7.setdefault():输入的key如果字典中有,则不更新,如果没有,则创建 31 info.setdefault('test','new') 32 33 #8.fromkeys():批量创造字典元素 34 35 #9.循环: 36 for k in info: 37 print(k,info[k]) 38 #输出: 39 # stu001 mm 40 # stu002 tt 41 # stu003 ['mumu', 'small dog'] 42 # 1 2 43 # 2 3 44 # test new 45 46 for k,v in info.items(): #相对低效,有一个字典转换成列表的过程 47 print(k,v) 48 #输出: 49 # stu001 mm 50 # stu002 tt 51 # stu003 ['mumu', 'small dog'] 52 # 1 2 53 # 2 3 54 # test new
(3)习题:
1 #写代码,有如下字典,按照要求实现每一个功能:dic = {'k1':'v1','k2':'v2','k3':'v3'} 2 3 #1.请循环遍历出所有的 key 4 dic = {'k1':'v1','k2':'v2','k3':'v3'} 5 for k in dic: 6 print(k) 7 # k1 8 # k2 9 # k3 10 11 #2.请循环遍历出所有的 value 12 for k in dic: 13 print(dic[k]) 14 # v1 15 # v2 16 # v3 17 18 #3.请循环遍历出所有的 key 和 value 19 for k in dic: 20 print(k,dic[k]) 21 # k1 v1 22 # k2 v2 23 # k3 v3 24 25 #4.请在字典中添加一个键值对,'k4':'v4',输出添加后的字典 26 dic['k4'] = 'v4' 27 print(dic) 28 #输出:{'k1': 'v1', 'k2': 'v2', 'k3': 'v3', 'k4': 'v4'} 29 30 #5.请删除字典中键值对 'k1':'v1',并输出删除后的字典 31 dic.pop('k1') 32 #或者 33 #del dic['k1'] 34 print(dic) 35 36 #输出:{'k2': 'v2', 'k3': 'v3', 'k4': 'v4'} 37 38 #6.请删除字典中的键'k5'对应的键值对,如果字典中不存在键'k5',则不报错,并且让其返回 None 39 40 # for k in dic: 41 # if dic.get('k5'): 42 # dic.pop('k5') 43 # print(dic) 44 # else: 45 # print(dic.get('k5')) 46 # # None 47 # # None 48 # # None 49 # #返回3个none,在检查考虑一下 50 51 if dic.get('k5'): 52 dic.pop('k5') 53 print(dic) 54 else: 55 print(dic.get('k5')) 56 #输出:None 57 58 #7.请获取字典中'k2'对应的值 59 print(dic['k2']) 60 #输出:v2 61 62 #8.请获取字典中'k6'对应的值,如果键'k6'不存在,则不报错,并且让其返回 None 63 print(dic.get('k6')) 64 #输出:None 65 66 #9.现有 dic2 = {'k1':'v111','a':'b'}通过一行操作使 dic2 = {'k1':'v1','k2':'v2','k3':'v3','a':'b'} 67 dic2 = {'k1':'v111','a':'b'} 68 dic2.update({'k1':'v1','k2':'v2','k3':'v3'}) 69 print(dic2) 70 #输出:{'k1': 'v1', 'a': 'b', 'k2': 'v2', 'k3': 'v3'} 71 72 #10.组合嵌套题,学代码,有如下列表,按照要求实现每一个功能 73 lis = [['k',['qwe',20,{'k1':['tt',3,'1']},89],'ab']] 74 #a.将列表lis中的'tt'变成大写(用两种方式) 75 # lis[0][1][2].get('k1')[0] = 'TT' 76 # print(lis) 77 # #输出:[['k', ['qwe', 20, {'k1': ['TT', 3, '1']}, 89], 'ab']] 78 print(lis[0][1][2].get('k1')[0].upper()) 79 print(lis[0][1][2].get('k1')[0].swapcase()) 80 # TT 81 # TT 82 83 #b.将列表中的数字 3 变成字符串 '100'(用两种方式) 84 lis[0][1][2].get('k1')[1] = '100' 85 print(lis) 86 #输出:[['k', ['qwe', 20, {'k1': ['tt', '100', '1']}, 89], 'ab']] 87 88 dic3 = {'k1': ['tt', '100', '1']} 89 lis[0][1][2].update(dic3) 90 print(lis) 91 #输出:[['k', ['qwe', 20, {'k1': ['tt', '100', '1']}, 89], 'ab']] 92 93 #c.将列表中的字符串'1'变成数字101(用两种方式) 94 lis[0][1][2].get('k1')[2] = 101 95 print(lis) 96 #输出:[['k', ['qwe', 20, {'k1': ['tt', '100', 101]}, 89], 'ab']] 97 98 dic4 = {'k1': ['tt', '100', 101]} 99 lis[0][1][2].update(dic4) 100 print(lis) 101 #输出:[['k', ['qwe', 20, {'k1': ['tt', '100', 101]}, 89], 'ab']] 102 103 #11 按照要求实现以下功能: 104 105 #现有一个列表li = [1,2,3,'a','b',4,'c'],有一个字典(此字典是动态生成的,你并不知道他里面有多少键值对,所以 106 107 #用dic = {}模拟此字典);现在需要完成这样的操作:如果该字典没有'k1'这个键,那就创建'k1'键和其对应的值(该键对应的值设置为空列表) 108 109 #并将列表li 中的 索引为奇数的对应元素,添加到'k1'这个键对应的空列表中。如果该字典有'k1'这个键,且'k1'对应的value 110 111 #是列表类型,那就将li中的索引为奇数的对应元素,添加到'k1'这个键对应的键中 112 113 li = [1,2,3,'a','b',4,'c'] 114 115 dic = {} 116 117 if not 'k1' in dic: 118 dic['k1'] = [] 119 for i in li: 120 if li.index(i) %2 == 1: 121 dic['k1'].append(i) 122 else: 123 if type(dic['k1']) == type([]): 124 for i in li: 125 if li.index(i) %2 == 1: 126 dic['k1'].append(i) 127 print("字典k1,value不是列表,无法追加!") 128 129 print(dic)
五.集合类型:
(1) 集合是一个无序的,不重复的数据组合,它的主要作用如下:
1.去重,把一个列表变成集合,就自动去重了
2.关系测试,测试两组数据之前的交集,差集,并集的关系
(2)方法:
1 #1.去重: 2 s = {1,2,3,4,2,3,7} 3 print(s) 4 #输出:{1, 2, 3, 4, 7} 5 6 #2.可将列表和元组转换成集合 7 l = [2,3,4,3,4,5] 8 s1 = set(l) 9 print(s1) 10 #输出:{2, 3, 4, 5} 11 12 #3.add:增加 13 s.add(6) 14 print(s) 15 #输出:{1, 2, 3, 4, 6, 7} 16 17 #4.pop:随机删除 18 s.pop() 19 print(s) 20 #输出:{2, 3, 4, 6, 7} 21 22 #5.remove:删除,不存在会报错 23 s.remove(7) 24 print(s) 25 #输出:{2, 3, 4, 6} 26 27 #6.discard:删除,不存在不报错 28 29 #7.update:两个集合联合 30 31 #8.clear:清除
(3)集合关系测试:
1 #1.交集:intersection和& 2 iphone7 = {'tt','mm','zz'} 3 iphone8 = {'mm','zz','mumu'} 4 5 print(iphone7.intersection(iphone8)) 6 #输出:{'mm', 'zz'} 7 print(iphone7 & iphone8) 8 #输出:{'mm', 'zz'} 9 10 #2.差集:difference和- 11 print(iphone7.difference(iphone8)) 12 #输出:{'tt'} 13 print(iphone7 - iphone8) 14 #输出:{'tt'} 15 16 #3.并集:union 和 | 17 print(iphone7.union(iphone8)) 18 #输出:{'zz', 'tt', 'mumu', 'mm'} 19 print(iphone7 | iphone8) 20 #输出:{'zz', 'tt', 'mumu', 'mm'} 21 22 #4.对称差集:symmetric_difference和^ 23 s2 = {1,2,3,4} 24 s3 = {2,3,5,6} 25 print((s2|s3)-(s2&s3)) 26 #输出:{1, 4, 5, 6} 27 28 print(s2.symmetric_difference(s3)) 29 #输出:{1, 4, 5, 6} 30 print(s2^s3) 31 #输出:{1, 4, 5, 6} 32 33 #5.issubset:判断是否为子集 <= 34 s3.add(1) 35 s3.add(4) 36 print(s3) 37 #输出:{1, 2, 3, 4, 5, 6} 38 print(s2.issubset(s3)) 39 #输出:True 40 41 #6.issuperset:判断是否为父集 >= 42 print(s3.issuperset(s2)) 43 #输出:True 44 45 #7.isdisjoint:判断两个集合是不是不相交 46 47 #8.s2.difference_update(s3):将两者的差集赋值给s2