07 深浅拷贝
基础数据类型的补充 join() 把列表转化成字符串,是迭代的方式进行的拼接 lst = ["alex", "dsb", "wusir", "xsb"] # 使用前面的字符串. 对后面的列表进行拼接,拼接的结果是一个字符串 s = "_".join(lst) print(s) ###alex_dsb_wusir_xsb split() 把字符串转化成列表 lst = 'alex$dsb$wusir$xsb' s = lst.split('$') print(s) ####['alex', 'dsb', 'wusir', 'xsb'] 列表和字典都不能再循环的时候直接删除,要把删除的内容记录在新的列表中,然后在循环这个新列表,删除列表(字典) 最合理的删除方式: 1,把要删除的内容写在新列表中 2, 循环这个新列表,删除老列表
lst = ['篮球', '排球', '足球', '电子竞技', '台球']
new_lst = []
for i in lst:
if '球' in i:
new_lst.append(i)
for i in new_lst:
lst.remove(i)
print(lst) 关于删除的具体的讲解 st = ["篮球", "排球" ,"足球", "电子竞技", "台球"] lst.clear() for el in lst: lst.remove(el) print(lst) # 删不干净.原因是: 删除一个. 元素的索引要重新排列, for循环向后走一个. 差一个 for i in range(len(lst)): # 0 1 2 3 4 lst.pop(0) print(lst) #[] lst = ["篮球", "排球" ,"足球", "电子竞技", "台球"] # 最合理的删除方式: # 1. 把要删除的内容写在新列表中. # 2. 循环这个新列表. 删除老列表 # 需求: 删除列表中代球字的运动项目 new_lst = [] for el in lst: if "球" in el: new_lst.append(el) # 记录要删除的内容 # 要删除的列表 print(new_lst) # 循环新列表. 删除老列表 for el in new_lst: # ['篮球', '排球', '足球', '台球'] lst.remove(el) print(lst) 字典 列表和字典在被循环的时候是不能删除的. 1,把要删除的key保存在一个新列表中, 2,循环这个列表.删除字典中的key:vlause
##### 坑: 大坑, 神坑 面试题: fromkeys() 帮我们创建字典的, 把第一个参数进行迭代. 拿到每一项作为key和后面的value组合成字典 #坑1: 返回新字典,和原来的字典没有关系
dic = {}
d = dic.fromkeys('风扇哥', '很困') ###会新建一个字典
print(dic) #{} #坑2: 如果value是可变的数据类型,那么其中的一个key对应value
d = dict.fromkeys('胡辣汤',[])
print(d) #{'胡': [], '辣': [], '汤': []}
d['胡'].append("河南特色") ### key 对应的是同一个列表,key变但是value不变
print(d) #{'胡': ['河南特色'], '辣': ['河南特色'], '汤': ['河南特色']} 深浅拷贝 1.= 没有创建新对象,只是把内存地址进行了复制 从上到下只有一个列表被创建 2.lst.copy 浅拷贝,只拷贝第一层 copy.deepcopy() 深拷贝,对象内部的所有内容都要进行拷贝. 深度克隆.原型模式 为什么要有深浅的拷贝? 提高创建对象的速度,计算中最慢的,就是创建对象,需要分配内存. 最快的方式就是二进制流的形式进行复制.速度最快.
扫码关注我们
微信号:SRE实战
拒绝背锅 运筹帷幄
更多精彩