集合 SET
定义:
只有键没有值的字典,保留无序的元素,没有索引。集合的元素不可变。
创建:
1.set_1 = set(seq)
2.set_2 = {}
list_1 = [1,2,3,45,4,2] set_1 = set(list_1) set_2 = {1,1,2,3,4,3} print(set_1) #out:{1, 2, 3, 4, 45} print(set_2) #out:{1, 2, 3, 4}
创建只有一个元素的集合
set_11 = set(('python',)) set_12 = {'python'} set_3 = set('hello') print(set_11) #out:{'python'} print(set_12) #out:{'python'} print(set_3) #out:{{'e', 'l', 'o', 'h'}
创建多个元素的集合
set_21 = set(('hello','python')) set_22 = set(('hello','python')) set_23 = {'hello','python'} print(set_21) #out:{{'hello', 'python'} print(set_22) #out:{{'hello', 'python'} print(set_23) #out:{{'hello', 'python'}
增:
单个增加
set_a = set(('hello','python')) set_a.add('world') print(set_a) #out:{'hello', 'python', 'world'}
批量增加
set_u = set(('hello',)) set_p = set(('python',)) set_u.update(set_p) print(set_u) #out:{'hello', 'python'} set_u.update({'world'}) print(set_u) #out:{'world', 'hello', 'python'} set_u.update('world') print(set_u) #{'w', 'python', 'world', 'o', 'l', 'd', 'r', 'hello'}
删:
remove:删除指定元素。若元素不存在则会报错。
discard:删除指定元素。若元素不存在则不会报错。
pop:随机删除元素,然而在交互模式,pop 是删除集合的第一个元素(排序后的集合的第一个元素)。
set_r = set(('hello','python','world','qsl')) set_r.remove('hello') print(set_r) #out:{'world', 'qsl', 'python'} set_r.pop() print(set_r) #out:{'qsl', 'python'} set_r.discard('qsl') print(set_r) #out:{'python'} set_r.discard('hello') print(set_r) #out:{'python'} set_r.remove('hello') #out:KeyError: 'hello'
集合的操作:
#并集 #set_a|set_b = set_b|set_a = set_a.union(set_b) = set_b.union(set_a) set_a = set(('hello','python')) set_b = set(('hello','world')) print(set_a|set_b) #out:{'world', 'hello', 'python'} set_a.update(set_b) print(set_a) #out:{'world', 'hello', 'python'} print(set_a.update(set_b)) #out: None #交集 #set_a.intersection(set_b)= set_a&set_b =set_b.intersection(set_a) = set_b&set_a set_a = set(('hello','python')) set_b = set(('hello','world')) print(set_a&set_b) #out:{'hello'} #差集:set_a中有而set_b中无 #set_a.difference(set_b) = set_a-set_b set_a = set(('hello','python')) set_b = set(('hello','world')) print(set_a.difference(set_b)) #out:{'python'} print(set_a-set_b) #out:{'python'} #判断子集:查看set_a是否为set_b的子集 # set_a.issubset(set_b) = set_a <= set_b set_a = set(('hello','python')) set_b = set(('hello','world')) print(set_a.issubset(set_b)) #out:False print(set_a <= set_b) #out:False
内置方法
序号 | 方法 | 说明 |
1 | add() | 为集合添加元素,一次只能加一个 |
2 | update() | 给集合添加元素,一个可以加多个 |
3 | copy() | 拷贝一个集合 |
4 | clear() | 移除集合中的所有元素 |
5 | discard() | 删除集合中指定的元素,若不存在,不会报错 |
6 | remove() | 移除指定元素,若不存在,则会报错 |
7 | pop() | 随机移除元素 |
8 | union() | 返回两个集合的并集 |
9 | intersection() | 返回集合的交集 |
10 | difference() | 返回多个集合的差集 |
11 | difference_update() | 移除集合中的元素,该元素在指定的集合也存在 |
12 |
intersection_update() |
删除集合中的元素,该元素在指定的集合中不存在 |
13 | issubset() | 判断指定集合是否为该方法参数集合的子集。 |
14 | isdisjoint() | 判断两个集合是否包含相同的元素,如果没有返回 True,否则返回 False |
15 | issuperset() | 判断该方法的参数集合是否为指定集合的子集 |
16 | symmetric_difference() | 返回两个集合中不重复的元素集合 |
17 |
symmetric_difference_update() |
移除当前集合中在另外一个指定集合相同的元素,并将另外一个指定集合中不同的元素插入到当前集合中 |
推导式:
和列表推导式相似,都是对一个序列进行操作。
但集合推导式的结果无序且不重复。
list_1 = [1,2,3,-1,4,-2] set_1 = { i**2 for i in list_1 } print(set_1) #out:{16, 1, 4, 9} print(type(set_1)) #out:<class 'set'>