07_python_集合深浅拷贝
一、join
1 li = ["李嘉诚", "麻花藤", "林海峰", "刘嘉玲"]
2 s = "_".join(li) # 循环遍历列表,把列表中的每一项用''_''拼接
3 print(s)
4 结果:
5 李嘉诚_麻花藤_林海峰_刘嘉玲
6 li = "花闺"
7 s = "_".join(li)
8 print(s)
9 结果:
10 花_闺
1、join()方法是把列表转换成字符串,join就是迭代。
字符串 => 列表 s.split() 列表 => 字符串 '_' . join( li )
2、删除列表中的元素,删除字典也同样方法
循环删除列表中的元素会出现删不干净的问题
1 li = [11, 22, 33, 44]
2 for e in li: # for 循环内部存在一个变量来记录当前被访问循环的位置索引,每次删除都会涉及元素移动
3 li.remove(e)
4 print(li)
5 结果:
6 [22, 44]
由于删除元素会导致元素的索引改变, 所以容易出现问题. 尽量不要再循环中直接去删 除元素. 可以把要删除的元素添加到另⼀个集合中然后再批量删除.
1 li = [11, 22, 33, 44]
2 li_new = []
3 for el in li:
4 li_new.append(el)
5 for i in li_new:
6 li.remove(i)
7 print(li)
字典删除元素
1 dic = {'k1': 'alex', 'k2': 'wusir', 's1': '⾦⽼板'}
2 dic_del_list = []
3 # 删除key中带有'k'的元素
4 for k in dic:
5 if 'k' in k:
6 dic_del_list.append(k)
7 for el in dic_del_list:
8 del dic[el]
9 print(dic)
二、fromkeys()
1 dic = dict.fromkeys(["jay", "JJ"], ["周杰伦", "麻花藤"])
2 print(dic)
3 结果:
4 {'jay': ['周杰伦', '麻花藤'], 'JJ': ['周杰伦', '麻花藤']}
fromkeys()不是改变字典,它是一个类方法,作用是创建新字典前⾯列表中的每⼀项都会作为key, 后⾯列表中的内容作为value. ⽣成新dict,fromkeys正常来说应该是类名访问的
1 d = dict.fromkeys(['a','b'],[])
2 d['a'].append('alex')
3 结果:
4 {‘a’:['alex'], 'b':['alex']}
5 # 所有key用的是同一个列表,改变其中一个,另一个也跟着改变
三、集合 set()
1、set集合是python的⼀个基本数据类型. ⼀般不是很常⽤. set中的元素是不重复的.⽆序的.⾥ ⾯的元素必须是可hash的(int, str, tuple,bool), 我们可以这样来记. set就是dict类型的数据但 是不保存value, 只保存key. set也⽤{}表⽰
注意: set集合中的元素必须是可hash的, 但是set本⾝是不可hash得. set是可变的.
2、字典中key不会重复。集合中存的如字典中key类似
s = set( ) # 空集合
s = {1,2,3} # set集合
3、集合的特点:不重复,元素不可变(可hash)
4、去重
1 li = [1,2,3,1,1,1,1,2,2,2,4,4,4,5,5,5,5]
2 se = set(li)
3 li_new = list(se)
4 print(li_new)
四、深浅拷贝
1、定义
(1) 赋值没有创建新对象。多个变量共享同一个对象
![](https://img2018.cnblogs.com/blog/1227507/201812/1227507-20181208183248368-1346531986.png)
(2)浅拷贝。 会创建新对象。 新的对象中里面的内容不会被拷贝
![](https://img2018.cnblogs.com/blog/1227507/201812/1227507-20181208183419899-2087291189.png)
(3)深拷贝。 创建一个一摸一样的完全新的对象。 这个对象延伸出来的内容也会跟着复制一份
![](https://img2018.cnblogs.com/blog/1227507/201812/1227507-20181208183435599-669528523.png)