一. 对之前的知识点进行补充.
1. str中的join方法. 把列表转换成字符串
1 join将列表转换成字符串. 每个元素之间用_拼接 2 s= "_".join(["马玉","王重阳","周伯通"]) 3 print(s) 4 5 切割split 6 7 ss= "马玉_王重阳_周伯通" 8 ss=ss.split("_") 9 print(ss)
2. 列表和字典在循环的时候不能直接删除.
需要把要删除的内容记录在新列表中.
然后循环新列表.删除字典或列表
1 1 lst=["老子","儿子","孙子","嫂子"] 2 2 lst.clear()清除 3 3 print(lst ) 4 4 new_lst=[]#创建一个新的列表 5 5 for el in lst:#循环lst这列表 每次的元素(el) 6 6 new_lst.append(el)#把lst 循环的元素(el)添加到 新的列表中 可以 print(new_lst) 7 7 for el in new_lst:#循环new_lst 的列表的元素 8 8 lst.remove(el) #删除旧的列表元素 9 9 print(lst) # 打印旧的列表
1 删除姓周的 2 lst1=[] 3 lst = ["周永康","周杰伦","这周","王重阳","啦啦啦"] 4 for i in lst: 5 if i.startswith("周"): 开始其实 startswith 6 lst1.append(i) 7 for i in lst1: 8 lst.remove(i) 9 print(lst) 10 print(lst1)
1 字典 2 dic = {"提莫":"冯提莫", "发姐":"陈一发儿", "55开":"卢本伟"} 3 # dic.clear() 4 lst = [] 5 for k in dic: 6 lst.append(k) 7 8 for el in lst: 9 dic.pop(el) 10 print(dic)
综上. 列表和字典都不能再循环的时候进行删除. 字典再循环的时候不允许改变大小
3. fromkeys()
1. 返回新字典. 对原字典没有影响
2. 后面的value.是多个key共享一个value
1 dic = {"apple":"苹果", "banana":"香蕉"} 2 返回新字典. 和原来的没关系 3 ret = dic.fromkeys("orange", "橘子") # 直接用字典去访问fromkeys不会对字典产生影响 4 ret = dict.fromkeys("abc",["哈哈","呵呵", "吼吼"]) # fromkeys直接使用类名进行访问 5 print(ret) 6 a = ["哈哈","呵呵", "吼吼"] 7 ret = dict.fromkeys("abc", a) # fromkeys直接使用类名进行访问 8 a.append("嘻嘻") 9 print(ret)
二. set集合
特点:
无序, 不重复, 元素必须可哈希(不可变)
作用:
去重复
本身是可变的数据类型. 有增删改查操作.
frozenset()冻结的集合. 不可变的. 可哈希的
1 集合去重复:
lst = [45, 5, "哈哈", 45, '哈哈', 50] lst = list(set(lst)) # 把list转换成set, 然后再转换回list print(lst)
2. 增加
s = {"刘嘉玲", '关之琳', "王祖贤"} s.add("郑裕玲")
print(s) s.add("郑裕玲")
# 重复的内容不不会被添加到set集合中
print(s) s = {"刘嘉玲", '关之琳', "王祖贤"} s.update("麻花藤") # 迭代更更新
print(s) s.update(["张曼⽟玉", "李李若彤","李李若彤"])
print(s)
3.删除
s = {"刘嘉玲", '关之琳', "王祖贤","张曼⽟玉", "李李若彤"} item = s.pop() #随机删除
print(s)
print(item)
s.remove("关之琳") # 直接删除元素
# s.remove("⻢马⻁虎疼") # 不不存在这个元素. 删除会报错 print(s)
s.clear() # 清空set集合.需要注意的是set集合如果是空的. 打印出来是set() 因为要和 dict区分的.
print(s) # set()
修改:
# set集合中的数据没有索引. 也没有办法去定位⼀一个元素. 所以没有办法进⾏行行直接修改.
# 我们可以采⽤用先删除后添加的⽅方式来完成修改操作
s = {"刘嘉玲", '关之琳', "王祖贤","张曼⽟玉", "李李若彤"}
# 把刘嘉玲改成赵本⼭山
s.remove("刘嘉玲")
s.add("赵本⼭山") print(s
查询:
for循环
常用操作:
& 并集
| 并集
- 差集
^ 反交集
< 子集
> 超集
三. 深浅拷贝(难点)
1. 赋值. 没有创建新对象. 公用同一个对象
2. 浅拷贝. 拷贝第一层内容. [:]或copy()
3. 深拷贝. 拷贝所有内容. 包括内部的所有.copy.deepcopy