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、作业练习

 

posted @ 2020-02-22 10:54  全村的希望、  阅读(231)  评论(0编辑  收藏  举报