我的python学习之路-容器类型数据操作
本文内容:
一、流程控制
1.4、pass、break、continue 关键字的应用
二、字符串的相关操作,字符串的格式化 format
三、列表、元组的操作
四、 列表、元组的相关方法
五、字典的相关函数
六、集合相关的操作
一、流程控制
分为三种:1、 顺序结构 2、分支结构 3、 循环结构
1、顺序结构
默认代码从上到下依次执行
2、分支结构
1、单分支结构
study_bug = "xx" if study_bug == "xx": print("你的年薪最高")
2、双分支结构
goodman = "xx" if goodman == "xx": print("勤工俭学") else: print("好吃懒做")
3、多分支结构
1 youqian = False 2 youfang = False 3 youche = False 4 youyanzhi = True 5 youtili = True 6 7 if youqian == True: 8 print("老娘要嫁给你1") 9 elif youfang == True: 10 print("老娘要嫁给你2") 11 elif youche == True: 12 print("老娘要嫁给你3") 13 elif youyanzhi == True: 14 print("老娘要嫁给你4") 15 elif youtili == True: 16 print("老娘要嫁给你5") 17 else: 18 print("你是个好人..")
4、巢状分支
单项分支,双向分支,多项分支的互相嵌套的一种语法
1 youqian = True 2 youfang = True 3 youche = False 4 youyanzhi = True 5 youtili = False 6 7 if youqian == True: 8 if youfang == True: 9 if youche == True: 10 if youyanzhi == True: 11 if youtili == True: 12 print("别想跑了,老娘要定了...") 13 else: 14 print("上道边,重金求子") 15 else: 16 print("请你去泰国整容...") 17 else: 18 print("你去买了布加迪威航") 19 else: 20 print("你是个好人 .. ")
3、 循环结构
特点: 减少冗余代码,提升代码效率,while for 两种循环、
1、while 循环
# 打印1 ~ 100 # 第一步 i = 1 # 第二步 while i <= 100: # 第四步 print(i) # 第三步 i += 1 # i = i + 1
2. for循环
适用于 可迭代性数据(Iterable)(容器类型数据,range对象,迭代器)
# 遍历字符串 container = "王寅要加油" # 遍历列表 container = ["王生福","敬旭阳","熊海瑞","梁瑞卿"] # 遍历元组 container = ("王生福","敬旭阳","熊海瑞","梁瑞卿") # 遍历集合 container = {"王生福","敬旭阳","熊海瑞","梁瑞卿"} # 遍历字典 (遍历数据时,默认遍历的是字典的键) container = {"wsf":"王生福","jxy":"敬旭阳","xhr":"小黄人"} for i in container: print(i)
# 遍历不等长的二级容器 container = [("杨特","白金鸽","郝建康"),["吕菲菲","王寅"],{"赵沈阳"}] for i in container: for j in i : print(j)
# 遍历等长的二级容器,采用变量解包的方式 container = [("马保国","马户","马累"),["王健林","王思聪","王寅"],("马云","马化腾","马伊琍")] for a,b,c in container: print(a,b,c)
2.1 range的三种用法对象 (留头舍尾)
1.range( start , end , step )
for i in range(1,10,3): # 1 4 7 print(i)
2. range( start , end )
for i in range(3,7): # 3 4 5 6 print(i)
3.range(end) 从0开始,留头舍尾
for i in range(3):print(i)
4、pass、break、continue 关键字的应用
1)、pass 用作来占位
if 5 == 5: pass while True: pass
2)、break 终止当前循环 (只能应用在循环之中)
i = 1 while i <= 10 : print(i) if i == 5 : break i += 1
3)、continue 跳过当前循环,从下一次循环开始 (只能应用在循环之中)
for i in range(1,11): if i == 5: continue print(i)
二、字符串的相关操作,字符串的格式化 format
1、字符串的相关操作
第一部份
# part1 # *capitalize 字符串首字母大写 strvar = "how old are you" res = strvar.capitalize() print(res) # *title 每个单词的首字母大写 strvar = "how are you" res = strvar.title() print(res) # *upper 将所有字母变成大写 strvar = "to be or NOT to be" res = strvar.upper() print(res) # *lower 将所有字母变成小写 res = strvar.lower() print(res) # *swapcase 大小写互换 res = strvar.swapcase() print(res) # *len 计算字符串的长度 res = len(strvar) print(res) # *count 统计字符串中某个元素的数量 """count(字符,[start,end])""" strvar = "to be or NOT to be" res = strvar.count("b") res = strvar.count("b",4) res = strvar.count("b",4,8) print(res) # *find 查找某个字符串第一次出现的索引位置 (推荐) """find(字符,[start,end]) 如果找不到对应字符,返回-1""" strvar = "oh father this is my favorate dog" res = strvar.find("this") res = strvar.find("is",15) res = strvar.find("is",15,16) # -1 print(res) # *index 与 find 功能相同 find找不到返回-1,index找不到数据直接报错 (了解) # res = strvar.index("is",15,16) # error # print(res) # *startswith 判断是否以某个字符或字符串为开头 """startswith(字符,[start,end]) 成立返回True,反之返回False""" strvar = "oh father this is my favorate dog" res = strvar.startswith("oh") res = strvar.startswith("oh",3) res = strvar.startswith("father",3,9) print(res) # *endswith 判断是否以某个字符或字符串结尾 """endswith(字符,[start,end]) 成立返回True,反之返回False""" strvar = "oh father this is my favorate dog" res = strvar.endswith("dog") res = strvar.endswith("dog",-4) res = strvar.endswith("dog",-4,-2) # d print(res)
第二部分
# *isupper 判断字符串是否都是大写字母 strvar = "TO BE" res = strvar.isupper() print(res) # *islower 判断字符串是否都是小写字母 res = strvar.islower() print(res) # *isdecimal 检测字符串是否以数字组成 必须是纯数字 strvar = "12345" res = strvar.isdecimal() print(res)
# *split 按某字符将字符串分割成列表(默认字符是空格) """split("字符",切割次数) 从左至右""" strvar = "you can you up no can no bb" lst = strvar.split() strvar = "you@can@you@up" lst = strvar.split("@") # 从左至右切割 lst = strvar.split("@",1) # 从右至左切割 lst = strvar.rsplit("@",1) print(lst) # *join 按某字符将列表拼接成字符串(容器类型都可) lst = ['you','can','you','up'] res = "@".join(lst) print(res) # *center 填充字符串,原字符居中 (默认填充空格) strvar = "***" res = strvar.center(10) # 默认填充空格 res = strvar.center(10,"#") # 可选择填充的符号 print(res) # *strip 默认去掉首尾两边的空白符(空格\n \t \r ... ) strvar = " 刘德华 " print(strvar.strip()) #rstrip 去掉右边某个字符 print(strvar.rstrip()) #lstrip 去掉左边某个字符 print(strvar.lstrip()) # *replace() """ 功能: 把字符串的旧字符换成新字符 格式: 字符串.replace('旧字符','新字符'[, 限制替换的次数]) 返回值: 替换之后的字符串 """ strvar = "可爱的小狼狗喜欢吃肉,有没有,有没有,还有没有" res = strvar.replace("有没有","真没有") # 替换一次 res = strvar.replace("有没有","真没有",1) print(res)
2、字符串的格式化 format
1、顺序传参
strvar = "{}向{}开了一枪,饮蛋而亡".format("王寅","菲菲") print(strvar) # 王寅向菲菲开了一枪,饮蛋而亡
2、索引传参
strvar = "{1}向{0}开了一枪,饮蛋而亡".format("王寅","菲菲") print(strvar) #菲菲向王寅开了一枪,饮蛋而亡
3、关键字传参
strvar = "{who1}从后面掏了{who2}一下,回头一记天马流星拳".format(who1="王寅",who2="方进顺") print(strvar) #王寅从后面掏了方进顺一下,回头一记天马流星拳
4、容器类型数据传参
strvar = "{0[1]}亲了{1[0]}一下,鼻血直冒三万多尺".format(["王钊","郝建康"],("荷叶","王永捐")) strvar = "{group2[1]}亲了{group1[1]}一下,鼻血直冒三万多尺".format(group1=["王钊","郝建康"],group2 = ("荷叶","王永捐")) # group2[yj] 如果是字典在format格式化字符串的使用中,不能加上引号"" strvar = "{group2[yj]}亲了{group1[0]}一下,鼻血直冒三万多尺".format(group1=["王钊","郝建康"],group2 = {"wz":"王兆","yj":"永捐"}) print(strvar)
5、format 填充符号的使用
^ :原字符串居中
< :原字符串居左
> :原字符串居右
who:*^10
* :要填充的符号
^ :原字符串居中
10: 填充的字符串 +原字符串
strvar="{who:*^7}在在{where:->6}坐着,看风景,感觉{feel:!<10}" .format(who="小明",where="阳台",feel="高兴") strvar="{0:*^7}在在{1:->6}坐着,看风景,感觉{1:!<10}" .format("小明","阳台","高兴") print(strvar) # **小明***在在----阳台坐着,看风景,感觉阳台!!!!!!!!
6、进制转换等特殊符号的使用(:d :s :f)
(1):d 整型占位符 :2d 占三位
strvar= "小明买了{:<2d}个苹果" .format(5) print(strvar) #小明买了5 个苹果
(2):f 浮点型占位符 (必须是浮点型) 默认小数点保留六位
strvar = "于盛林毕业了,一个月工资:{:f}".format(9.91234567) # :.2f 小数点保留两位 存在四舍五入 strvar = "于盛林毕业了,一个月工资:{:.2f}".format(9.91934567) print(strvar) #于盛林毕业了,一个月工资:9.92
(3):s 字符串占位符 (必须是字符串)
strvar = "{:s}".format("欢庆真胖~") print(strvar) #欢庆真胖~
(4):, 金钱占位符
strvar = "{:,}".format(12345678) print(strvar) #12,345,678
三、列表、元组的操作
1.列表的拼接 (同元组)
lst1 = ["梁新宇","孟凡伟"] lst2 = ["孙接口","王永捐"] res = lst1 + lst2 print(res) #['梁新宇', '孟凡伟', '孙接口', '王永捐']
2.列表的重复(同元组)
lst1 = ["梁新宇","孟凡伟"] res = lst1 * 3 print(res) #['梁新宇', '孟凡伟', '梁新宇', '孟凡伟', '梁新宇', '孟凡伟']
3、列表的切片(同元组)
1 lst = ["曹培显","欢庆","刘玉波","耿择时","家营和","黄常见","刘灵镇","孙翔宇"] 2 # (1)[开始索引:] 从开始索引截取到列表的最后 3 res = lst[2:] 4 print(res) #['刘玉波', '耿择时', '家营和', '黄常见', '刘灵镇', '孙翔宇'] 5 # (2)[:结束索引] 从开头截取到结束索引之前(结束索引-1) 6 res = lst[:7] 7 print(res) #['曹培显', '欢庆', '刘玉波', '耿择时', '家营和', '黄常见', '刘灵镇'] 8 # (3)[开始索引:结束索引] 从开始索引截取到结束索引之前(结束索引-1) 9 res = lst[3:5] 10 print(res) #['耿择时', '家营和'] 11 # (4)[开始索引:结束索引:间隔值] 从开始索引截取到结束索引之前按照指定的间隔截取列表元素值 12 # 从左到右 正向截取 13 res = lst[::3] 14 print(res) #['曹培显', '耿择时', '刘灵镇'] 15 # 从右向左 逆向截取 16 res = lst[::-1] 17 print(res) #['孙翔宇', '刘灵镇', '黄常见', '家营和', '耿择时', '刘玉波', '欢庆', '曹培显']
4、列表的获取 (同元组)
res = lst[1] print(res) #欢庆
5、列表的修改( 可切片 )
1)、一次修改一个
lst=[1,2,3,4,5,6,7,8] lst[0]="a" print(lst) # ['a', 2, 3, 4, 5, 6, 7, 8]
2)、一次修改多个 ,等号右边必须是Iterable(容器类型的数据 range对象 迭代器)
lst=[1,2,3,4,5,6,7,8] lst[1:3]="abc" print(lst) #1, 'a', 'b', 'c', 4, 5, 6, 7, 8]
3)、一次修改多个(带步长) 截取几个,修改几个
lst=[1,2,3,4,5,6,7,8] lst[::3]=["a","b","c"] print(lst) #['a', 2, 3, 'b', 5, 6, 'c', 8]
6、列表的删除(可切片)
1)、 一次删除一个
lst=[1,2,3,4,5,6,7,8] del lst[0] print(lst) #[2, 3, 4, 5, 6, 7, 8]
2)、一次删除多个
lst=[1,2,3,4,5,6,7,8] del lst[0:2] print(lst) # [3, 4, 5, 6, 7, 8]
3)、注意点 (改写法删除的是res 变量,不是列表)
lst=[1,2,3,4,5,6,7,8] res= lst[0:2] del res print(lst) #[1,2,3,4,5,6,7,8]
四、列表、元组的相关方法
1、增加
1、append 向列表的末尾添加新的元素
lst = [1] lst.append(2) print(lst) # [1, 2]
2、insert 在指定索引之前插入元素
lst=[1,2] lst.insert(0,3) print(lst) #[3, 1, 2]
3、extend 迭代追加所有元素
必须是Iterable这样的可迭代性数据(容器类型数据、range对象、迭代器)
lst1=[4,5] lst1="abc" lst.extend(lst1) print(lst) #[3, 1, 2, 'a', 'b', 'c']
2、删除
1、pop 通过指定索引删除元素,若没有索引移除最后那个 (推荐)
lst = [1,2,3,4,5,5] lst.pop(2) print(lst) # [1,2,4,5,5]
2.remove 通过给予的值来删除,如果多个相同元素,默认删除第一个
lst = [1,2,3,4,5,5] lst.remove(5) print(lst) #[1,2,3,4,5]
3.clear 清空列表
lst.clear() print(lst) #[]
3、其他操作
1、index 获取某个值在列表中的索引
lst = [1,2,3,4,5,5]
res = lst.index(5) # res = lst.index(6) #不存在报错 print(res) # 4
2、count 元素的数量
lst = [1,2,3,4,5,5] res = lst.count(5) print(res) # 2
3、sort() 列表排序 (基于原有列表进行修改)
针对于数字:
# 正序 lst=[-1,-4,-6,45,1,100] lst.sort() print(lst) #[-6, -4, -1, 1, 45, 100] #反向 lst=[-1,-4,-6,45,1,100] lst.sort(reverse=True) print(lst) #[100, 45, 1, -1, -4, -6]
针对于字母:
ascii 编码进行排序 大小写字母ascii相差32
按照ascii编码的大小,一位一位的进行比较,默认从小到大
针对于中文:
能排序,无规律可循
4、reverse 列表反转操作
lst=[1,2,3] lst.reverse() print(lst) #[3, 2, 1]
元组的相关操作除了不能修改和删除其中的元素之外 , 剩下操作都和列表相同.
元组里面能用的方法只有 index 和 count
五、字典的相关函数
1、增加
(1)使用键值来来增加
dic = {} dic["top"] = "廉颇" dic["middle"] = "妲己" dic["bottom"] = "孙尚香" print(dic) # {'top': '廉颇', 'middle': '妲己', 'bottom': '孙尚香'}
(2) fromkeys() 使用一组键和默认值创建字典 (快速定义字典)
lst = ["a","b",'c'] # fromkeys(塞满键的容器,默认值) dic = {}.fromkeys(lst,None) print(dic) # {'a': None, 'b': None, 'c': None}
注意点 慎用
dic = {}.fromkeys(lst,[]) dic["a"].append(1) print(dic) #{'a': [1], 'b': [1], 'c': [1]}
2、删除
(1)pop() 通过键去删除键值对 (若没有该键可设置默认值,预防报错)
dic = {'top': '廉颇', 'middle': '妲己', 'bottom': '孙尚香',"jungle":"猴子","support":"小明"} # 指定键删除对应的键值对 res = dic.pop("jungle") # 若没有该键可设置默认值,预防报错 res = dic.pop("middle123434","抱歉,该键不存在") print(res) print(dic) #抱歉,该键不存在
(2)popitem() 删除最后一个键值对
dic = {'top': '廉颇', 'middle': '妲己', 'bottom': '孙尚香',"jungle":"猴子","support":"小明"} res = dic.popitem() print(res) #('support', '小明') print(dic) #{'top': '廉颇', 'middle': '妲己', 'bottom': '孙尚香', 'jungle': '猴子'}
(3)clear() 清空字典
1 dic.clear() 2 print(dic) #{}
3、改变
(1)update() 批量更新(有该键就更新,没该键就添加
dic = {'top': '廉颇', 'middle': '妲己', 'bottom': '孙尚香'} # 没该键就添加 dic_new = {"support":"瑶"} dic.update(dic_new) print(dic) #{'top': '廉颇', 'middle': '妲己', 'bottom': '孙尚香', 'support': '瑶'} # 有该键就更新 dic_new = {'middle': '武则天'} dic.update(dic_new) print(dic) #{'top': '廉颇', 'middle': '武则天', 'bottom': '孙尚香', 'support': '瑶'}
4、查找
(1)get() 通过键获取值(若没有该键可设置默认值)
dic = {'top': '廉颇', 'middle': '妲己', 'bottom': '孙尚香'} # 没有该键不报错返回None res = dic.get("top123") res = dic.get("top123","抱歉,改键不存在") # res = dic["top"] print(res)
5、其他方法
(1)keys() 将字典的键组成新的可迭代对象
dic = {'top': '廉颇', 'middle': '妲己', 'bottom': '孙尚香'} res = dic.keys() print(res , type(res)) #dict_keys(['top', 'middle', 'bottom']) <class 'dict_keys'>
(2)values() 将字典中的值组成新的可迭代对象
dic = {'top': '廉颇', 'middle': '妲己', 'bottom': '孙尚香'} res = dic.values() print(res , type(res)) #dict_values(['廉颇', '妲己', '孙尚香']) <class 'dict_values'>
(3) items() 将字典的键值对凑成一个个元组,组成新的可迭代对象
dic = {'top': '廉颇', 'middle': '妲己', 'bottom': '孙尚香'} res = dic.items() print(res , type(res)) #dict_items([('top', '廉颇'), ('middle', '妲己'), ('bottom', '孙尚香')]) <class 'dict_items'>
for k,v in dic.items(): print(k,v) ''' top 廉颇 middle 妲己 bottom 孙尚香 '''
六、集合相关的操作
1、交差并补
1 set1 = {"郭杰瑞","药水哥","张大仙","王文"} 2 set2 = {"蔡徐坤","王力宏","郭德纲","王文"} 3 4 # 1.交集 5 res = set1.intersection(set2) 6 print(res) #{'王文'} 7 8 # 简写 9 res = set1 & set2 10 print(res) 11 12 # 2.差集 13 res = set1.difference(set2) 14 print(res) #{'郭杰瑞', '张大仙', '药水哥'} 15 16 # 简写 17 res = set1 - set2 18 print(res) 19 # 3.union 并集 20 res = set1.union(set2) 21 print(res) #{'王文', '郭德纲', '张大仙', '王力宏', '郭杰瑞', '蔡徐坤', '药水哥'} 22 23 # 简写 24 res = set1 | set2 25 print(res) 26 27 # 4.symmetric_difference 28 res = set1.symmetric_difference(set2) 29 print(res) #{'郭德纲', '张大仙', '王力宏', '郭杰瑞', '蔡徐坤', '药水哥'} 30 31 # 简写 32 res = set1 ^ set2 33 print(res)
2、其他方法
(1)issubset() 判断是否是子集
set1 = {"王文","王宝强","王健林","王思聪"} set2 = {"王文","王宝强"} res = set2.issubset(set1) print(res) # 简写 res = set2 < set1 print(res)
(2)issuperset() 判断是否是父集
set1 = {"王文","王宝强","王健林","王思聪"} set2 = {"王文","王宝强"} res = set1.issuperset(set2) print(res) # 简写 res = set1 > set2 print(res
(3)isdisjoint() 检测两集合是否不相交 不相交 True 相交False
set1 = {"王文","王宝强","王健林","王思聪"} set2 = {"王文","王宝强"} res = set1.isdisjoint(set2) print(res) #False
3、增加
1.一次加一个
setvar = {"周润发"} setvar.add("周星驰") setvar.add("周树人") print(setvar)
2.一次加一堆
update() 迭代着增加
setvar = {"马诺"} lst = "abc" setvar.update(lst) print(setvar) #{'c', 'a', '马诺', 'b'}
4、删除
(1)clear() 清空集合
setvar.clear() print(setvar)
(2)pop() 随机删除集合中的一个数据
setvar = {'张大仙', '郭杰瑞', '药水哥', '郭德纲', '蔡徐坤', '王力宏'} res = setvar.pop() print(res) print(setvar)
(3)remove() 删除集合中指定的值(不存在则报错) (了解)
setvar.remove("张大仙") # setvar.remove("张大仙1233434343") error print(setvar)
(4)discard() 删除集合中指定的值(不存在的不删除 推荐使用)
setvar.discard("郭杰瑞") setvar.discard("郭杰瑞11122333") print(setvar)
5、冰冻集合 (扩展)
冰冻集合一旦创建,不能在进行任何修改,只能做交差并补操作
frozenset 可强转容器类型数据变为冰冻集合
lst = ["马蓉","马化腾","马户","马云","码农"] fz = frozenset(lst) print(fz,type(fz)) #frozenset({'马化腾', '码农', '马户', '马蓉', '马云'}) <class 'frozenset'>