1.集合的创建
集合是一个无序不重复元素的集。基本功能包括关系测试和消除重复元素。
创建集合:大括号或 set() 函数可以用来创建集合。注意:想要创建空集合,你必须使用 set() 而不是 {},后者用于创建空字典。大括号也不可以创建元素含有字典与列表的集合。
集合中三个特性
1. 确定性
2. 互异性(去重)
3. 无序性(集合中元素没有先后之分),如集合{3,4,5}和{3,5,4}算作一个集合
In [79]: s = {1} In [80]: type(s) Out[80]: set In [81]: s = {1,2,3,5,6,3} In [82]: type(s) Out[82]: set In [85]: s # 去重了(3 出现两次) Out[85]: {1, 2, 3, 5, 6}
集合创建
# 1. 直接创建 In [102]: s = {1,2,3,4,3,5} In [103]: s Out[103]: {1, 2, 3, 4, 5} In [104]: type(s) Out[104]: set # 2. 通过列表转成集合 In [105]: l=[1,2,3,4,5,6,3] In [106]: s=set(l) In [107]: s Out[108]: {1, 2, 3, 4, 5, 6} # 3. 通过元组转换成集合 In [109]: t=(1,2,3,4,5,6,3) In [110]: s=set(t) In [111]: s Out[111]: {1, 2, 3, 4, 5, 6}
增加:
add ,之前集合中有就不添加,没有就添加,但是每次只能添加一个值,否则报错
# 集合中有就不增加,没有就增加 In [124]: s = {1,2,3,4,5} In [125]: s.add(2) # 之前有就不增加 In [126]: s Out[126]: {1, 2, 3, 4, 5} In [127]: s.add(6) #之前没有,就增加 In [128]: s Out[128]: {1, 2, 3, 4, 5, 6}
In [147]: s.add(1,23) # 因为只允许添加一个,此时添加多个就报错
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-147-4b15bfd145fc> in <module>()
----> 1 s.add(1,23)
TypeError: add() takes exactly one argument (2 given) 提示说指给一个参数,上面却给了两个参数
删除
pop 随机删除
In [129]: s Out[129]: {1, 2, 3, 4, 5, 6} In [130]: s.pop() Out[130]: 1 In [131]: s Out[131]: {2, 3, 4, 5, 6}
remove指定删除,没有就报错
In [131]: s Out[131]: {2, 3, 4, 5, 6} In [132]: s.remove(6) In [133]: s Out[133]: {2, 3, 4, 5}
In [138]: s.remove(10)
---------------------------------------------------------------------------
KeyError Traceback (most recent call last)
<ipython-input-138-99f2b84d3df8> in <module>()
----> 1 s.remove(10)
KeyError: 10
discard 删除, 有就删除,没有就不删除也不报错
In [139]: s Out[139]: {2, 4, 5} In [140]: ret=s.discard(2) In [141]: ret In [142]: ret=s.discard(100) In [143]: ret
update更新
In [145]: s.update([1,2,3,4]) # 以列表方式添加 In [146]: s Out[146]: {1, 2, 3, 4, 5}
In [150]: s.update((10,11)) # 以元组方式添加
In [151]: s
Out[151]: {1, 2, 3, 4, 5, 10, 11}
clear 清除
In [152]: s.clear() In [153]: s Out[153]: set()
集合类型的关系
1. 交集
In [1]: iphone7 = {'cmz','aimi','keke','jack'} In [2]: iphone8 = {'cmz','Tom','eric'} In [3]: iphone7.intersection(iphone8) Out[3]: {'cmz'}
或者
In [4]: iphone7&iphone8 # 去交集
Out[4]: {'cmz'}
2. 差集
In [5]: iphone7.difference(iphone8) Out[5]: {'aimi', 'jack', 'keke'} In [6]: iphone7-iphone8 Out[6]: {'aimi', 'jack', 'keke'} In [7]: iphone8.difference(iphone7) Out[7]: {'Tom', 'eric'} In [8]: iphone8-iphone7 Out[8]: {'Tom', 'eric'}
3. 并集
In [10]: iphone7.union(iphone8) # 顺序没先后 Out[10]: {'Tom', 'aimi', 'cmz', 'eric', 'jack', 'keke'} In [11]: iphone7|iphone8 # 顺序没先后 Out[11]: {'Tom', 'aimi', 'cmz', 'eric', 'jack', 'keke'}
4. 对称差集(交集取反)
In [25]: s = {1,2,3,4} In [26]: s2 = {2,3,5,6} In [27]: s^s2 Out[27]: {1, 4, 5, 6} In [28]: s.symmetric_difference(s2) Out[28]: {1, 4, 5, 6}
5.子集
In [37]: s Out[37]: {1, 2, 3, 4} In [38]: s2 Out[38]: {1, 2, 3, 4, 5, 6} In [39]: s.issubset(s2) # s是s2的的子集 Out[39]: True
或者
In [44]: s2<=s
Out[44]: False
In [40]: s2.issuperset(s) # s2是s的的超集 Out[40]: True
或者
In [43]: s2>=s
Out[43]: True
其他
In [50]: s1={1,2,3} In [51]: s2={1,2,4,5} In [52]: s1.difference(s2) #求出 s1 s2的差集 Out[52]: {3} In [54]: s1.difference_update(s2) In [55]: s1 Out[55]: {3} # 此时将差集的值赋值给s1 In [56]: s2 Out[56]: {1, 2, 4, 5}
s.intersection_update
s.symmetric_difference_update
这两个方法和上述类似