一:set集合:
set集合是python的一个基本数据类型. 一般不是很常用. set中的元素是不重复的.无序的.里面的元 素必须是可hash的(int, str, tuple,bool), 我们可以这样来记. set就是dict类型的数据但是不保存 value,只保存key. set也用{}表示
注意:set集合中的元素必须是可哈希的,但set本身时可变的不可哈希的,set集合中的元素是不重复并且 无序的,使用这个特性我们可以使用set集合来去掉重复!
例:lst = [45, 5, "哈哈", 45, '哈哈', 50]
lst = list(set(lst)) # 把list转换成set, 然后再转换回list
print(lst) 结果[45,5,50,哈哈]
字典的新增: set.add(内容) 注意: 重复的内容不会添加到set集合中
set.update(可迭代内容) 迭代添加
删除: a=set.pop() 随机弹出一个 a为弹出的元素
set.remove(指定内容删除) remove为指定内容删除,如果不存在这个元素则会报错
set.clear() 清空集合 需要注意的是set集合如果为空打印出来是set() 因为要和
dict区分的.
修改:set集合中的数据没有索引,也没办法定位一个元素,我们可以采用先删除后添加的方式来 完成修改
查询: set集合是一个可迭代对象 所以可以使用 for 循环
二:深浅拷贝:
1. 赋值。 不会产生新对象。 和拷贝没关系
2. 浅拷贝。 只会复制自身。 会创建对象
例:lst1 = ["何炅", "杜海涛","周渝民", ["麻花藤", "马芸", "周笔畅"]]
lst2 = lst1.copy()
lst1[3].append("无敌是多磨寂寞")
print(lst1)
print(lst2)
print(id(lst1[3]), id(lst2[3]))
结果:
['何炅', '杜海涛', '周渝民', ['麻花藤', '马芸', '周笔畅', '无敌是多磨寂寞']]
['何炅', '杜海海涛', '周渝民', ['麻花藤', '马芸', '周笔畅', '无敌是多磨寂寞']]
4417248328 4417248328
浅拷贝. 只会拷贝第一层. 第二层的内容不会拷贝. 所以被称为浅拷贝
3. 深拷贝。 把内部所有的内容都进行拷贝。
例:import copy 引入模块
lst1 = ["何炅", "杜海涛","周渝民", ["麻花藤", "马芸", "周笔畅"]]
lst2 = copy.deepcopy(lst1)
lst1[3].append("无敌是多磨寂寞")
print(lst1)
print(lst2)
print(id(lst1[3]), id(lst2[3]))
结果:
['何炅', '杜海涛', '周渝民', ['麻花藤', '马芸', '周笔畅', '无敌是多磨寂寞']]
['何炅', '杜海涛', '周渝民', ['麻花藤', '马芸', '周笔畅']]
4447221448 4447233800
都不一样了了. 深度拷贝. 把元素内部的元素完全进行拷贝复制. 不会产生一个 改变另一个跟着改变的问题
三 附:
列表切割为字符串的常用操作:例:li=["赵","钱","孙","李"]
s="_".join(li) 结果:赵_钱_孙_李
循环删除列表或字典的每个元素:
由于删除元素会导致元素的索引改变, 所以容易出现问题. 尽量不要再循环中直接去删
除元素. 可以把要删除的元素添加到另一个集合中然后再批量删除
例如:把要删除的元素暂时先保存在一个list中, 然后循环list, 再删除