11. 集合(Set)

集合是一个无序不重复元素的序列

11.1 创建集合

  • 可以使用大括号 {} 或者 set() 函数创建集合
  • 创建一个空集合必须用 set() 而不是 {},因为 {} 是用来创建一个空字典
  • set(value) 方式创建集合,value 可以是字符串、列表、元组、字典等序列类型
  • 创建、添加、修改等操作,集合会自动去重
{1, 2, 1, 3} # {} {1, 2, 3}  
set('12345') # 字符串 {'3', '5', '4', '2', '1'}  
set([1, 'a', 23.4]) # 列表 {1, 'a', 23.4}  
set((1, 'a', 23.4)) # 元组 {1, 'a', 23.4}  
set({1:1, 'b': 9}) # 字典 {1, 'b'}  

11.2 添加元素

将元素 val 添加到集合 set 中,如果元素已存在,则不进行任何操作:

set.add(val)  

也可以用 update 方法批量添加元素,参数可以是列表,元组,字典等:

set.update(list1, list2,...)  

11.3 移除元素

如果存在元素 val 则移除,不存在就报错:

set.remove(val)  

如果存在元素 val 则移除,不存在也不会报错:

set.discard(val)  

随机移除一个元素:

set.pop()  

11.4 元素个数

与其他序列一样,可以用 len(set) 获取集合的元素个数。

11.5 清空集合

set.clear()  
set = set()  

11.6 判断元素是否存在

val in set  

11.7 其他方法

方法 描述
set.copy() 复制集合
set.difference(set2) 求差集,在 set 中却不在 set2 中
set.intersection(set2) 求交集,同时存在于 set 和 set2 中
set.union(set2) 求并集,所有 set 和 set2 的元素
set.symmetric_difference(set2) 求对称差集,不同时出现在两个集合中的元素
set.isdisjoint(set2) 如果两个集合没有相同的元素,返回 True
set.issubset(set2) 如果 set 是 set2 的一个子集,返回 True
set.issuperset(set2) 如果 set 是 set2 的一个超集,返回 True

11.8 集合计算

a = set('abracadabra')  
b = set('alacazam')  
print(a) # a 中唯一的字母  
# {'a', 'r', 'b', 'c', 'd'}  
print(a - b) # 在 a 中的字母,但不在 b 中  
# {'r', 'd', 'b'}  
print(a | b) # 在 a 或 b 中的字母  
# {'a', 'c', 'r', 'd', 'b', 'm', 'z', 'l'}  
print(a & b) # 在 a 和 b 中都有的字母  
# {'a', 'c'}  
print(a ^ b) # 在 a 或 b 中的字母,但不同时在 a 和 b 中  
# {'r', 'd', 'b', 'm', 'z', 'l'}  

11.9 集合推导式

a = {x for x in 'abracadabra' if x not in 'abc'}  
print(a)  
# {'d', 'r'}  

发表回复

登录... 后才能评论