1. 集合(set):就是把一些不同的元素聚集在一起形成集合,在Python中也是数据类型的一种
不可变数据类型:数字,字符串,元组 可变类型:列表,字典
作用:去重,去除列表中重复的
进行关系测试
1.1 创建集合
1 s1=set("sang") 可变集合 可添加和删除元素,不能用作字典的键
dic = {s1:"123"} unhashable type: 'set'
2 s2= frozenset('alex') 不可变集合 3 print(s2,type(s2))
结果为:
{'s', 'a', 'g', 'n'} <class 'set'> frozenset({'a', 'l', 'x', 'e'}) <class 'frozenset'>
1 a = set([ 1,2,3,4,5 ]) 2 b = set([ 4,5,6,7,8 ])
3 c = set([2,2,3,5])
4 print(a)
5 print(b)
6 print(type(a))
7 print(type(b))
8 print(c)
结果为:
{1, 2, 3, 4, 5}
{8, 4, 5, 6, 7}
<class 'set'>
<class 'set'>
{2,3,5}
如上所示最后结果显示的就是 set的类型,还有通过上面 (c)就可以发现集合的元素是不重复的即它可以自动去重,还有集合是无序的(b)
1 li=[[1,2],'a','b'] 2 s =set(li) #TypeError: unhashable type: 'list' 3 print(s)
集合对象是一组无序排列的可哈希的值其成员可以用来作字典的键
1.2 访问集合
1 s = set("sang") 2 print("a" in s) 3 #s[1] # 'set' object does not support indexing
4 for i in s:
5 print(i)
结果:
1 1 True 2 2 n 3 3 s 4 4 a 5 5 g
1.3 集合的操作
增加add
1 s = set("sang") 2 s.add(2) 3 s.add("alex") 4 print(s)
结果:
1 {'s', 2, 'g', 'a', 'n', 'alex'}
update 添加多个元素
1 s.update("SANG") 2 print(s)
结果:
1 {2, 'a', 'g', 'n', 'A', 'G', 'alex', 's', 'S', 'N'}
remove 移除
1 s.remove("S") 2 print(s)
结果:
1 {2, 'alex', 'g', 'A', 'a', 'N', 'n', 's', 'G'}
1.4集合的操作符运算
intersection()交集 #union 并集 a = t |s t和s的并集 difference 差集 #父集 超集
1 a = set([ 1,2,3,4,5 ]) 2 b = set([ 4,5,6,7,8 ]) 3 #intersection() 交集 4 print(a.intersection(b)) 5 print(a & b) 6 7 #union 并集 a = t |s t和s的并集 8 print(a.union(b)) 9 print(a| b) 10 11 #差集 12 print(a.difference(b))# a-b in a not in b 13 print(b.difference(a)) # b-a in b not in a 14 print(a-b) 15 print(b-a) 16 print(a.symmetric_difference(b)) # symmetric对称,差集 ,反向交集 17 print(a ^ b) 18 19 #父集 超集 20 print(a.(b)) #a>b 21 print(a.issubset(b)) #子集issuperseta<b
结果:
1 F:Python安装python.exe "G:/Pycharm文件/week4/day13 9.5/集合.py" 2 {4, 5} 3 {4, 5} 4 {1, 2, 3, 4, 5, 6, 7, 8} 5 {1, 2, 3, 4, 5, 6, 7, 8} 6 {1, 2, 3} 7 {8, 6, 7} 8 {1, 2, 3} 9 {8, 6, 7} 10 {1, 2, 3, 6, 7, 8} 11 {1, 2, 3, 6, 7, 8} 12 False 13 False 14 15 Process finished with exit code 0
2.深浅拷贝
有时候我们也许会需要 对一个列表进行复制,但是如果和很多次呢,我们就需要去开辟很大的空间,显然是不行的所以呢我们这里就用到了copy的用法也就是拷贝,
不可变数据类型:数字,字符串,元组 可变类型:列表,字典
话不多说我就举一个例子大家看一下 结果又什么不同
1 import copy 2 husband = ["xiaohu",123,[15000,9000]] 3 wife = husband.copy() 4 wife[0] = "xiaopang" 5 wife[1] = 456 6 wife[2][1]-=500 # 浅 7 print(wife) 8 print(husband) 9 10 xiaosan = copy.deepcopy(husband) 11 xiaosan[0] = "jinxin" 12 xiaosan[1] = "789" 13 xiaosan[2][1] -=1800 14 print(xiaosan) #深 15 print(husband)
结果为:
1 F:Python安装python.exe "G:/Pycharm文件/week4/day13 9.5/深浅拷贝.py" 2 ['xiaopang', 456, [15000, 8500]] 3 ['xiaohu', 123, [15000, 8500]] 4 ['jinxin', '789', [15000, 6700]] 5 ['xiaohu', 123, [15000, 8500]] 6 7 Process finished with exit code 0