set集合和深浅拷贝
集合(set)
集合,保存大量数据,不可以重复 特点:无序,不可重复,内容可哈希,本身不可哈希
k = frozenset(集合):它就会变成一个可哈希的了
增:
s.add(内容)
s.update("内容"):迭代添加
删:
s.pop():随机删除一个,并返回删除的那个内容
s.pop():随机删除一个,并返回删除的那个内容
s.remove('指定元素'):删除指定元素,如果不存在会报错
s.clear():清空集合,如果打印出来空的集合会显示set({})
修改:
一般都是删除再添加的
查:
用for循环来查询
常用操作:
交集:
交集:
print(s1 & s2):返回他们之间相同的元素
s1.intersection(s2)
并集:
print(s1 | s2):返回一个集合,包括他们所有的内容,但是不重复
print(s1 | s2):返回一个集合,包括他们所有的内容,但是不重复
s1.union(s2):
差集
print(s1 - s2)
s1.difference(s2):返回s1去除和s2有相同的内容.如s1{123},s2{3,4,5}返回的是{1,2}
深浅拷贝
普通拷贝 s1==s2 ,如果s1改变,s2也会改变
浅拷贝: 只是对表面的一层可哈希的进行拷贝,拷贝不可哈希的的话只是拷贝内存地址,所以,他们里面的列表还是可变的s2 = s1.copy()
深拷贝:
import copy # 引入模块
ls2 = copy.deepcopy(1s1)
# 他是把所有东西都深层复制下来,ls1更改不会影响ls2
给出一个纯数字列表. 请对列表进行排序(升级题).
思路:
1. 完成a和b的数据交换. 例如, a = 10, b = 24 交换之后, a = 24, b = 10
2. 循环列表. 判断a[i]和a[i+1]之间的大小关系, 如果a[i]比a[i+1]大. 则进行互换. 循环结束的时候. 当前列表中最大的数据就会被移动到最右端.
3. 想一想, 如果再次执行一次上面的操作. 最终第二大的数据就移动到了右端. 以此类推. 如果反复的进行执行相应的操作. 那这个列表就变成了一个有序列表
lst = [88,5,8,6,1,23]
for a in range(len(lst)): # 记录内部排序的次数
i = 0
while i < len(lst) - 1: # 把最大值移动到右端
if lst[i] > lst[i+1]: # 比较,
lst[i], lst[i+1] = lst[i+1], lst[i] # 交换
i = i + 1
print(lst)