今日只要学习了
一. 基础数据类型的补充
二 ..深浅拷贝
一 . 主要内容:
之前讲的int 跟 str 已经讲过了80%的内容 接下来说剩下的:
1 .join
join与之前的spilt 作用是相反的. join 是将列表中的数据通过操作变成字符串 . 而split是通过字符串的切割将字符串变成列表 .
具体用法: 如 :li = ["李嘉诚", "麻花藤", "?海峰", "刘嘉玲"]
li1=‘ _ ‘ .join(li)
print( li1 ) 结果为‘‘李嘉诚_麻花藤_?海峰_刘嘉玲‘‘
由此我们可以看出join是将原来的列表类型变成了一个字符串
对比split :
str = "李嘉诚,麻花藤,?海峰,刘嘉玲"
str1=str.split(" ,")
print(str1) 结果为 [‘李嘉诚‘,‘麻花藤‘,‘?海峰‘,‘刘嘉玲‘]
我们可以看到这里的split是将之前的字符串形式变成了列表的形式
列表:
循环删除列表中的每一个元素.
li = [11, 22, 33, 44]
for e in li:
li.remove(e)
print(li)
结果:
[22, 44]
这里的原因是 for 在循环的过程中 ,会有一个指针记录当前循环的元素是哪一个,一开始这个元素的指向是第0个,然后执行获取, 删除命令.当删除完第一个元素之后,之前第二个元素变成了第一个元素,索引改变了,但是指针指向了第二个元素,刚好错开了. 如果用pop删除系统会报错,只有这样才是可以的.
for el in range(len(li)):
li.pop() # 这里默认删除的是最后一个 或者是 li.pop[0] #删除第一个元素
这里我们要讲的办法是用另一个列表记录你要删除的内容 ,然后循环删除原来要删除的列表
如: li = [11, 22, 33, 44]
li1=[]
for el in li:
li1.append(el)
for e in li1:
li.remove(e)
print(e)
注意: 由于元素删除后会导致元素的索引改变,容易出现问题,所以不要在循环中直接去单楚楚元素.可以把要删除的元素放到另一个列表中去,通过另一个列表的循环删除原来列表中的元素
dict 中可以通过fromkeys()来创建新的字典:
dic=dict.fromkeys([‘jay‘,‘jj‘],[‘周杰伦‘,‘麻花藤‘])
print(dic) 结果 :{ ‘jay‘ : [‘周杰伦‘,‘麻花藤‘] , ‘ jj ‘: [‘周杰伦‘,‘麻花藤‘] }
关于fromkeys 的两个大坑:
1,必须给前面赋值一个新的字典, 他返回的是新字典,与原字典无关.
dic={}
d=dic.fromkeys(‘张无极‘,[])
print(d) 结果为{‘张‘:[],‘无‘:‘[]‘,‘极‘:[]}
2.如果value是可变的值.
dic={}
d=dic.fromkeys(‘张无极‘,[])
dic[‘张‘]=‘呵呵‘
print(dic) 结果为{‘张‘:[呵呵],‘无‘:‘[呵呵]‘,‘极‘:[呵呵]}
原因: 这里的‘张‘ ‘无‘ ‘极‘用的是同一个[],如果其中一个改变了[]的值,其他的也会改变
二 .深浅拷贝
1 浅拷贝( 只拷贝第一层) 拷贝出来的内容不是之前的原内容,只是创建了一个和之前一样的 (此处可以联想的抄作业)
lst1 = ["金毛狮王", "紫衫龙王", "白眉鹰王", "青翼蝠王"]
lst2 = lst1
print(lst1)
print(lst2)
lst1.append("杨逍")
print(lst1)
print(lst2)
结果:
["金毛狮王", "紫衫龙王", "白眉鹰王", "青翼蝠王" ‘杨逍‘]
["金毛狮王", "紫衫龙王", "白眉鹰王", "青翼蝠王", ‘杨逍‘]
2. 深拷贝 对象的所有内容都要复制
from copy
lst2=copy.deepcopy(lst1)
这里的lst2就是深拷贝了lst1 中的所有内容,不会产生一个改变另一个跟着
改变的问题
原文地址:https://www.cnblogs.com/zty1304368100/p/10064626.html