【Python 3.6.1】集合
Python3中,集合是无序且不重复的组合
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
# 定义一个列表 >>> L = [8,2,4,6,6,6,7,7,7,5,5,5] >>> type(L) <class 'list'> >>> # 列表转换为集合 >>> S = set(L) >>> type(S) <class 'set'> >>> # 可以看到,集合为去重且排序 >>> print (S) {2, 4, 5, 6, 7, 8} >>> |
集合操作
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 |
# 定义列表 >>> L1 = [1,2,3,4,5] >>> L2 = [4,5,6,7,8] >>> # 转换集合 >>> s1 = set(L1) >>> s2 = set(L2) >>> # 返回s1和s2交集 >>> s1.intersection(s2) {4, 5} >>> # 或者 >>> s1 & s2 {4, 5} >>> # 返回s1和s2并集 >>> s1.union(s2) {1, 2, 3, 4, 5, 6, 7, 8} >>> # 或者 >>> s1 | s2 {1, 2, 3, 4, 5, 6, 7, 8} >>> # 返回s1和s2差集,也就是s1中存在,s2中不存在的元素 >>> s1.difference(s2) {1, 2, 3} >>> # 或者 >>> s1 - s2 {1, 2, 3} >>> # 对称差集,也就是去掉两个集合相同的部分 >>> s1.symmetric_difference(s2) {1, 2, 3, 6, 7, 8} >>> # 或者 >>> s1 ^ s2 {1, 2, 3, 6, 7, 8} >>> # 或者 >>> (s1 - s2) | (s2 - s1) {1, 2, 3, 6, 7, 8} >>> # s1是不是s2的子集,返回布尔型 >>> s1.issubset(s2) False >>> # s1是不是s2的父集,返回布尔型 >>> s1.issuperset(s2) False >>> # s1,s2是否无交集 >>> s1.isdisjoint(s2) False >>> |
返回集合中的元素:因为集合是无序的,所以无法使用索引获取元素
1 2 3 4 5 6 7 |
>>> set1 = {'a','b','c','d'} >>> for i in set1: print(i) a c d b |
集合的增、删、改、合并
1 2 3 4 5 6 7 8 9 10 11 12 13 |
# 集合中添加数据 >>> s = {'ddd',1,2,'abc',True} >>> s.add('hello') >>> print(s) {1, 2, 'ddd', 'hello', 'abc'} >>> # 如果数据中包含True且非首位,那么会将True转为1,因为集合的特性“去重”,所以如上例子,只显示一个1 # 如果数据中包含True且在首位,那么True将不会变,如果数据中还存在1的话,那么1会转为True >>> s = {True,'ddd',1,2,'abc'} >>> s.add('hello') >>> print(s) {True, 2, 'ddd', 'abc', 'hello'} >>> |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
# 集合中删除数据 #1:remove删除数据,如果数据不存在,则报错 #2:discard,删除数据,如果数据不存在,不报错 >>> s = {'ddd',1,2,'abc',True} >>> print(s) {1, 'ddd', 2, 'abc'} >>> s.remove(1) >>> print(s) {'ddd', 2, 'abc'} >>> # 此时集合中的1已经被删除,discard时,则没有报出任何错误 >>> s.discard(1) >>> print(s) {'ddd', 2, 'abc'} >>> # 此时集合中的1已经被删除,再执行一次remove,则报如下错误 >>> s.remove(1) Traceback (most recent call last): File "<stdin>", line 1, in <module> KeyError: 1 >>> |
1 2 3 |
# 修改 # 集合是无序的,因此不能直接通过索引来修改元素。如果你需要修改集合中的元素, # 请考虑使用列表(list)或字典(dict),这些数据结构允许你使用索引或键值对来修改数据。 |
1 2 3 4 5 6 7 |
# 合并 >>> s = {'ddd',1,2,'abc',True} >>> a = {7,8,9} >>> s.update(a) >>> print(s) {1, 2, 'abc', 7, 8, 9, 'ddd'} >>> |