Python入门基础(第5天):基本数据知识补充和深浅拷贝
1、基本类型知识补充
(1)join( ) 使用方法
# 将列表转换成字符串,每个元素之间用_拼接(可自定拼接字符) lst="-".join(["何东洋","he","5225"]) print(lst) # 字符串转换成列表用:split("分隔符") # 列表转换成字符串用:join("[内容]") ss="小何**晓东**假如" #字符串 print(ss.split("**"))
(2)remove( ) 使用方法
# 列表删除 lst=["鲁A4545","鲁C4554","川C1111","云A1245"] # lst.clear() #方法一:直接清空 # 方法二:使用remove()删除 lst1=[] #存放要删除的信息 for i in lst: #记录当前位置 lst1.append(i) # 循环新列表,删除老列表 for j in lst1: lst.remove(j) print(lst) print(lst1) # 指定列表删除 lst=["张三","张国立","张曼玉","张强","小何"] # 删除姓张的人 zhangs=[] #存放要删除的人 for el in lst: if el.startswith("张"): #检查字符串是否是以指定子字符串开头 zhangs.append(el) for i in zhangs: lst.remove(i) print(lst) # 字典删除 dic={"卢本伟":999,"冯提莫":45754,"小何":45458,"小东":45678,"小洋":98765} dic1=[] #存放要删除的人 for i in dic: dic1.append(i) for j in dic1: dic.pop(j) print(dic) # 综上,列表和字典都不循环的时候进行删除,字典在循环的时候不能改变大小
(3)fromkeys( ) 使用方法
# fromkeys("可迭代对象","内容")用法(使用类名直接访问) # dic={"小何":999,"晓东":45754,"小洋":45458} # #返回新字典,和原字典没关系 # ret=dic.fromkeys("小云","ds") # ret1=dic.fromkeys("abx",["hh","er"]) a=["aa","ww","er"] ret=dict.fromkeys("abc",a) #fromkeys()直接使用类名进行访问 a.append("gg") #追加到列表 print(ret)
2、set集合(无序,去重,可哈希)
set集合是Python的一个基本数据类型,set中的元素是不重复,无序的。 里面的元素必须是课hash的(int,str,tuple,bool),set就是dict类型的数据, 但是不保存value,只保存key,set也用{}表示。 注意:set集合中的元素必须是课hash的,但是set本身不可以hash,set是可变的。
(1)列表去重
s={12,45,154,12,54,45,84,32,1,5,15,1,5} print(s) # 集合去重 # 列表去重 lst=[12,54,154,1541,1245,124,121,124] #列表 lst1=set(lst) #把列表转换成集合,进行去重 lst2=list(lst1) #把去重的集合,再转回列表 print(lst2)
(2)集合迭代更新
集合本身是可变的数据类型,不可哈希,有增删改查操作
(3)增加
# 增加 s={"马化腾","马云","马蓉"} s.add("哈哈") #直接增加,重复内容不增加 s.update("马桶") #迭代更新增加 s.update(["利达","拉","拉"]) #增加列表中内容,重复不添加 print(s)
(4)删除
# 删除 s={"马化腾","马云","马蓉"} s.pop() #随机删除 s.remove("马云") #指定删除,如果不存在会报错 s.clear() #清空集合 print(s)
(5)修改
# 修改 # set集合中没有索引,没办法定位元素,所以不能直接修改,只能先删除后添加 s={"马化腾","马云","马蓉"} s.remove("马蓉") #删除马云 s.add("赵本山") #增加赵本山 print(s)
(6)查询
# 查询 # set集合是可迭代对象,可直接用for循环 s={"马化腾","马云","马蓉","mam"} for i in s: print(i)
(7)常用操作
# 常用操作 s={"马化腾","马云","马蓉","马上飞"} s1={"说的","好笑","马云","马化腾"} # 交集 print(s & s1) #结果:{'马化腾', '马云'} print(s.intersection(s1)) #函数用法,结果一样 # 并集 print(s | s1) #结果:{'说的', '马上飞', '马云', '马化腾', '好笑', '马蓉'} print(s.union(s1)) # 函数用法 # 差集(得到第一个集合中单独存在的元素) print(s - s1) #结果:{'马蓉', '马上飞'} print(s.difference(s1)) # 反交集(得到两个几个中单独存在的元素) print(s ^ s1) #结果:{'说的', '马上飞', '好笑', '马蓉'} print(s.symmetric_difference(s1)) # 子集(判断,false和true) print(s < s1) #False print(s.issubset(s1)) # 超集(判断,false和true) print(s > s1) #False print(s.issuperset(s1))
''' set集合本身是可以发生改变的,不可hash的,可使用frozenset保存数据 frozenset是不可变的, 是可哈希的数据类型 ''' #冻结 s=frozenset(["马化腾","马云","马蓉","马上飞"]) dic={s:"123"} print(dic)
3、深浅拷贝
(1)赋值
# 赋值 lst=["唐僧","孙悟空","猪八戒","沙师弟","小白龙"] bb=lst #直接赋值,没有创建新对象,共用同一个对象,地址一样 print(bb)
(2)浅拷贝
# 浅拷贝 lst=["唐僧","孙悟空","猪八戒",["观音大士","玉帝"],"沙师弟","小白龙"] aa=lst.copy() #拷贝第一层内容copy() aa=lst[:] #使用切片[:] lst[3].append("xia") #属于第二层,共用一个地址 print(aa) print(id(lst[3])) print(id(aa[3]))
(3)深拷贝
# 深拷贝 import copy #引入copy模块 lst=["唐僧","孙悟空","猪八戒",["观音大士","玉帝"],"沙师弟","小白龙"] lst2=copy.deepcopy(lst) lst[3].append("小学") print(lst) print(lst2) print(id(lst)) print(id(lst2))
4、作业练习
--来自爱说爱笑,浑身骄傲,不哭不闹,无视嘲笑,我是小尾巴,我为自己代言。