万恶之源---知识点补充+set集+深浅拷贝

一. 对之前的知识点进行补充.
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

猜你喜欢

转载自www.cnblogs.com/LW-LW-LW/p/9415915.html
今日推荐