09 - 集合
一.集合的特点(set)
-
集合(set)是一个无序的不重复元素序列:存储的顺序无序,没有下标一说
-
所以常常将有重复元素的列表转化为集合来达到去重的效果
list1 = [1,9,2,3,4,2,3,3,5] set1 = set(list1) print(set1) #{1, 2, 3, 4, 5, 9} 去重且升序
二.集合的格式
-
使用:
注意:如果花括号里面的元素是成对出现的--有冒号,那么就是字典,如果是单个单个出现,就是集合
三.创建集合
-
创建空集合只能用set():
set1 = set() -
创建非空集合既可用set(),也可以用
parame = {value01,value02,...} 或者 set1 = set(value)
四.集合相关操作
1.添加元素
-
add:将元素 x 添加到集合 s 中,如果元素已存在,则不进行任何操作
thisset = set(("Google", "Runoob", "Taobao")) thisset.add("Facebook") print(thisset) #结果:{'Taobao', 'Facebook', 'Google', 'Runoob'} -
update:可以添加元素,且参数可以是列表,元组,字典等
-
例题:
''' 产生5组不重复的字母数字组成的验证码 ''' import random set1 = set() msg = 'abcdefghijklnmopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890' while True: m = '' for j in range(4): #方法一: #index = random.randint(0,len(msg) - 1) #m += msg[index] #方法二: r = random.choice(msg) m += r set1.add(m) if len(set1) == 5: break print(set1)
2.删除元素
-
remove:将元素 x 从集合 s 中移除,如果元素不存在,则会发生错误。
thisset = set("Google", "Runoob", "Taobao") thisset.remove("Facebook") # 不存在会发生错误 -
discard:移除集合中的元素,且如果元素不存在,不会发生错误,且不做操作
thisset.discard("Facebook") # 不存在不会发生错误 -
del:删除指向集合的指针,如过集合没有其他指针指,则集合的地址空间会被释放
del thisset -
clear:清空集合元素
-
pop:删除集合集合中最后一个元素,但是由于集合是无序的,每次输出顺序可能都不一样,所以pop相当于随机删除
thisset = set(("Google", "Runoob", "Taobao", "Facebook")) x = thisset.pop() print(x) print(thisset)
3.集合独有的交集、并集、差集
-
intersection:交集
- 用符号代替为
&
set1 = {1,2,3,4,5} set2 = {3,4,5,6,7,8,9} newset = set1.intersection(set2) print(newset) #{3, 4, 5} print(set1 & set2) - 用符号代替为
-
union:并集
- 用符号代替为
|
set1 = {1,2,3,4,5} set2 = {3,4,5,6,7,8,9} newset = set1.union(set2) print(newset) #{1, 2, 3, 4, 5, 6, 7, 8, 9} print(set1 | set2) - 用符号代替为
-
difference:差集
- 用符号代替为
-
set1 = {1,2,3,4,5} set2 = {3,4,5,6,7,8,9} print(set1 - set2) #{1, 2} print(set2 - set1) #{8, 9, 6, 7}注意:不同对象调用差集的方法,得到的结果是不一样的,是根据调用者来考虑的----调用者有的而参数没有的
- 用符号代替为
五.集合推导式
-
类似于列表推导式:在列表推导式的基础上添加了一个去重的功能,返回一个集合
list1 = [1,2,3,4,2,3,3,7,8,9,6,4,5] set1 = {num+1 for num in list1 if num > 5} print(set1) #{8, 9, 10, 7}

浙公网安备 33010602011771号