1. str.join(element) 把字符串插入到元素当中去
s = "abc" s1 = s.join("非常可乐") print(s1)
>>>运行结果: 非abc常abc可abc乐
join()方法可以将列表变成字符串,相当于反过来的.split()方法
s = "_".join(["alex", "wuse", "taibai", "ritian"]) print(s)
>>>运行结果: alex_wuse_taibai_ritian
2. 列表不能在迭代循环过程中删除元素,字典也不行,因为在循环过程中如果进行删除或者增加操作,会改变索引,引发报错
解决办法: 把要删除或者新增的内容记录在列表中,循环列表,根据列表删除或者新增原列表,字典中的数据
lst = ["周杰伦", "周润发", "周星星", "马化腾", "周树人"] del_lst = [] for el in lst: if el.startswith("周"): del_lst.append(el) for el in del_lst: lst.remove(el) print(lst)
>>>运行结果: ['马化腾']
3. dict.fromkeys()方法,产生新字典,不会对原来字典造成影响
a = dict.fromkeys(["jj", 'jay', 'eason'], "牛逼") print(a) >>>输出结果: {'jj': '牛逼', 'jay': '牛逼', 'eason': '牛逼'}
dic = {"a":"123"} s = dic.fromkeys("王健林", "思聪" ) print(s) >>>输出结果: {'王': '思聪', '健': '思聪', '林': '思聪'}
4. set()集合
set()集合相当于字典,不过里边只有key.se()集合是不可哈希的,但里边是可哈希的.
frozenset()方法可以将set集合冻结,就是将set()集合变成了可哈希的
set()集合特点: 元素不重复,无序
5. 深浅拷贝
1. 理解赋值操作
lst1 = ["金毛狮王", "紫衫龙王", "白眉鹰王", "青衣服往"] lst2 = lst1 # 列表, 进行赋值操作. 实际上是引用内存地址的赋值. 内存中此时只有一个列表. 两个变量指向一个列表 lst2.append("杨做事") # 对期中的一个进行操作. 两个都跟着变 print(lst2) print(lst1) >>>lst2 = ['金毛狮王', '紫衫龙王', '白眉鹰王', '青衣服往', '杨做事'] >>>lst1 = ['金毛狮王', '紫衫龙王', '白眉鹰王', '青衣服往', '杨做事']
看一下图解:
我们在把lst1赋值给lst2时候其实已经连同lst1的内存地址一起给了lst2
所以对lst2进行修改之后,lst1的内容也同样被改变了
2.浅拷贝
lst1 = ["超人", "七龙珠", "葫芦娃", "山中小猎人", ["金城武", "王力宏", "渣渣辉"]] lst2 = lst1.copy() lst1[4].append("大阳哥") print(lst1, lst2) >>>lst1 = ['超人', '七龙珠', '葫芦娃', '山中小猎人', ['金城武', '王力宏', '渣渣辉', '大阳哥']] >>>lst2 = ['超人', '七龙珠', '葫芦娃', '山中小猎人', ['金城武', '王力宏', '渣渣辉', '大阳哥']]
看一下图解:
浅拷贝只是拷贝第一层内容,实际上双方的内存地址还是一样的,改变其中一个的值,另一个会随之一起改变
3. 深拷贝
深拷贝要借助于import copy
import copy lst1 = ["超人", "七龙珠", "葫芦娃", "山中小猎人", ["金城武", "王力宏", "渣渣辉"]] lst2 = copy.deepcopy(lst1) lst1[4].append("大阳哥") print(lst1, lst2) >>>lst1 = ['超人', '七龙珠', '葫芦娃', '山中小猎人', ['金城武', '王力宏', '渣渣辉', '大阳哥']] >>>lst2 = ['超人', '七龙珠', '葫芦娃', '山中小猎人', ['金城武', '王力宏', '渣渣辉']]
深拷贝与浅拷贝的区别就在于浅拷贝时内存地址并没有发生改变,而深拷贝相当于把lst1的全部内容拿出来重新放到另一个内存地址里
lst1和lst2的内存地址不同,所以对lst1进行修改时,lst2就不受影响
4. 为什么要使用深浅拷贝?
因为拷贝比直接创建对象快速的多,能够更加的节省时间