数据类型-集合

集合 也是python的容器类型之一,已{}包裹,元素之间用 ,分隔,集合最大的特点就是,容器类的元素不重复,集合里的元素是无序的, 它的基本用法包括成员检测消除重复元素。集合对象也支持像 联合交集差集对称差分等数学运算

1.特点

  • 集合里的元素是不重复的: 一般多用于列表去重
  • 集合里的元素是无序的: 一般不用于靠索引取值
  • 创建空集合不能使用{},要使用 set() 函数

示例

s1 = {10, 20, 30, 40, 50}

print(s1)
# 结果: {40, 10, 50, 20, 30}

s2 = {10, 30, 20, 10, 30, 40, 30, 50}

print(s2)
# 结果: {40, 10, 50, 20, 30}


s3 = set('abcdefg')

print(s3)
# 结果: {'d', 'f', 'b', 'e', 'g', 'c', 'a'}


s4 = set()

print(type(s4))
# 结果: <class 'set'>

s5 = {}

print(type(s5))
# 结果: <class 'dict'>

2. 集合常见操作

2.1 增加数据

  • add(): 增加数据至集合中
s1 = {10, 20}

s1.add(100)

s1.add(10)

print(s1) 
# 结果: {100, 10, 20}
因为集合有去重功能,所以,当向集合内追加的数据是当前集合已有数据的话,则不进行任何操作
  • update():, 追加的数据是序列
s1 = {10, 20} 

# s1.update(100)
# 报错  
# 报错信息:TypeError: 'int' object is not iterable 

s1.update([100, 200])
s1.update('abc') 

print(s1) 
# 结果: {100, 200, 10, 'a', 20, 'c', 'b'}

2.2 删除数据

  • remove(): 删除集合中的指定数据,如果数据不存在则报错
s1 = {10, 20} 

s1.remove(10) 

print(s1) 
# {20} 

s1.remove(10) 
# 报错  
# 结果: KeyError print(s1)
  • discard(): 删除集合中的指定数据,如果数据不存在也不会报错
s1 = {10, 20} 

s1.discard(10)

print(s1) 
# 结果:{20} 

s1.discard(10) 
print(s1) 
# 结果: {20}
  • pop(): 随机删除集合中的某个数据,并返回这个数据。
s1 = {10, 20, 30, 40, 50}

del_num = s1.pop()

print(del_num)
# 结果: 40

print(s1)
# {10, 50, 20, 30}

2.3 判断

  • in 与 not in: 判断元素是否存在集合中,存在返回 True, 不存在返回 False
s1 = {10, 20, 30, 40, 50}

print(10  in s1) 
# 结果:True 

print(10  not  in s1) 
# 结果:False

3 集合的数学运算

  • union()也可以用符号 | 表示,并集
两个集合的联合是一个新集合,该集合中的每个元素都至少是其中一个集合的成员,即属于两个集合其中之一的成员
s1 = {10, 20, 30, 40, 50} 
s2 = {100, 20, 50, 60, 80}

print(s1.union(s2)) 
print(set(s1 | s2)) 

# 结果:{100, 40, 10, 80, 50, 20, 60, 30}  
# 结果:{100, 40, 10, 80, 50, 20, 60, 30}
  • intersection(): 也可以用符号 & 表示,交集
可以把交集操作比做集合的AND(或合取)操作。两个集合的交集是一个新集合,该集合中的每个元素同时是两个集合中的成员,即属于两个集合的成员
s1 = {10, 20, 30, 40, 50}
s2 = {100, 20, 50, 60, 80}

print(s1.intersection(s2))
print(set(s1 & s2)) 

# 结果: {50, 20}  
# 结果: {50, 20}
  • difference(): 也可以用符号 - 表示,差集
两个集合(st)的差补或相对补集是指一个集合 c,该集合中的元素,只属于集合 s,而不属于集合 t, 使用时请注意 先后顺序
s1 = {10, 20, 30, 40, 50} 
s2 = {100, 20, 50, 60, 80} 

print(s1.difference(s2)) 
print(set(s1 - s2)) 
# {40, 10, 30}  
# {40, 10, 30}  

print(s2.difference(s1)) 
print(set(s2 - s1))

# {80, 100, 60}  
# {80, 100, 60}
  • symmetric_difference(),也可以用符号 ^ 表示,异或
两个集合(st)的对称差分是指另外一个集合c,该集合中的元素,只能是属于集合 s 或者 集合t的成员不能同时属于两个集合
s1 = {10, 20, 30, 40, 50} 
s2 = {100, 20, 50, 60, 80} 

print(s1.symmetric_difference(s2)) 
print(set(s1 ^ s2)) 

# {80, 100, 40, 10, 60, 30}  
# {80, 100, 40, 10, 60, 30}

无常
21 声望0 粉丝