1.关于删除(重点)
1.join可以把列表转化字符串
join里面内容迭代
2.for el in lst:
lst.remove(el)
# 内部有一个变量来记录当前被循环的位置
# 直接删除是删不干净的,
# 原因是每次删除都涉及到元素移动
先把要删除的内容保存到一个新列表里面 循环这个新列表
删除老列表
tem = []
for el in lst:
tem.append(el)
for el in tem:
lst.remove(el)
print(lst)
3.fromkeys
是一个类方法 作用是创建新字典
d = dict.fromkeys(["我哈哈", "test"], [])
d["test"].append("张无忌")
# 所用key用的同一个列表 改变一个 另外一个也跟着改变
print(id(d["test"]), id(d["我哈哈"]))
print(d)
"""
1918219439752 1918219439752
{'我哈哈': ['张无忌'], 'test': ['张无忌']}
"""
2.set集合
这里面的元素是无序可/哈希的
其实就是不存value的字典
去重===>最大的应用
1.增加
s.add("") #添加
s.update("xxx") #迭代更新
2.pop() 随机弹出 返回删除结果
s.remove("xxx") #指定内容
s = set{}
s = {1,2,3}
3.修改
先删除再添加
4.查询 for el in s:
print(el)
#可迭代的查询
5.其他操作
1.交集
s1&s2
2.并集
3.差集
4.反交集
5.子集
6.超集
面试题:在0-99里面生成10个随机数要求,不能重复
1 import random 2 3 # 取10个随机数 要求不能重复 4 nums = set() 5 count = 0 6 7 while count < 10: 8 nums.add(random.randint(0, 99)) 9 count = len(nums) 10 print(nums)
3.深浅拷贝(难点)
1.赋值没有创建对象,多个变量共享同一个对象
1 lst1 = ["赵敏", "蛛儿", "小昭", "周芷若"] 2 lst2 = lst1 3 lst1.append("张无忌") 4 print(lst2, id(lst1), id(lst2)) 5 """ 6 ['赵敏', '蛛儿', '小昭', '周芷若', '张无忌'] 3028745675336 3028745675336 7 """
2.浅拷贝:会创建新对象。新的对象里面的内容不会拷贝
1 lst1 = ["赵敏", "蛛儿", "小昭", "周芷若", ["金毛狮王", "白眉鹰王"]] 2 lst2 = lst1.copy() 3 lst1[4].append("张无忌") 4 print(lst1) 5 print(lst2) 6 print(id(lst1), id(lst2)) 7 print(id(lst1[4]),id(lst2[4])) 8 9 """ 10 ['赵敏', '蛛儿', '小昭', '周芷若', ['金毛狮王', '白眉鹰王', '张无忌']] 11 ['赵敏', '蛛儿', '小昭', '周芷若', ['金毛狮王', '白眉鹰王', '张无忌']] 12 2097090355848 2097119153864 13 2097090355784 2097090355784 14 """
3.深拷贝:创建一个一模一样的完全的对象,这个对象衍生出来的
1 import copy 2 lst1 = ["赵敏", "蛛儿", "小昭", "周芷若", ["金毛狮王", "白眉鹰王"]] 3 lst2 = copy.deepcopy(lst1) 4 lst1[4].append("张无忌") 5 print(lst1) 6 print(lst2) 7 print(id(lst1), id(lst2)) 8 print(id(lst1[4]),id(lst2[4])) 9 10 """ 11 ['赵敏', '蛛儿', '小昭', '周芷若', ['金毛狮王', '白眉鹰王', '张无忌']] 12 ['赵敏', '蛛儿', '小昭', '周芷若', ['金毛狮王', '白眉鹰王']] 13 2999280550344 2999280557704 14 2999280398856 2999280556680 15 """
内容也会跟着赋值一份
这个是面试内容,平时用得少
面试题
1 # -*- coding: utf-8 -*- 2 # @Time : 2019/5/22 8:16 3 # @Author : Scavenger 4 # @FileName: 49.py 5 # @Software: PyCharm 6 # @Github : https://github.com/dgfwork/ 7 # @Blog : https://www.cnblogs.com/gaofeng-d/ 8 import copy 9 10 # 直接赋值 浅拷贝 深拷贝 之间的区别 11 a = [1, 2, 3, [4, 5, [7, 8, 9]], 6] 12 13 b = a 14 c = copy.copy(a) 15 d = copy.deepcopy(a) 16 b.append(10) 17 c[3].append(11) 18 # 直接赋值 指向同一个地址 19 # 浅拷贝 只新建一份外层 里面的列表 还是指向同一个内存地址 20 print(id(a), id(b), id(c), id(d)) 21 print(id(a[3]), id(b[3]), id(c[3]), id(d[3])) 22 print(id(a[3][2]), id(b[3][2]), id(c[3][2]), id(d[3][2])) 23 24 d[3].append(12) 25 print(a) 26 print(b) 27 print(c) 28 print(d)