记录python集合set常见操作

1. 集合set的定义

  • 集合(set)是一个无序的不重复元素集

  • 可以使用大括号 { } 或者 set( ) 函数创建集合

  • 创建一个空集合必须用 set( ) 而不是 { },因为 { } 是用来创建一个空字典

2. 创建集合 set([iterable])

  • 通过传入可迭代对象于set函数来创建集合。当不传入参数时就是创建空集合
empty_s = set()
print(empty_s) # set()
s = set([1,2,2,3])
print(s) # {1, 2, 3}
  • 可以通过集合的创建方式来对一些可迭代对象去除重复值。
t1 = (1,2,2,3,3) # 需要去重
t1 = tuple(set(t1))
print(t1) # (1, 2, 3)

3. 集合的特性

  • 集合没有索引、切片、重复*、拼接+的特性,集合只有成员操作符、迭代循环遍历、枚举的特性

3.1 集合没有索引(也就没法切片,因为本身集合是无序的)

s = set([1,2,3])
s[0] # 报错 TypeError: 'set' object is not subscriptable
s[0:2] # 报错 TypeError: 'set' object is not subscriptable

3.2 集合元素不能重复

s = set([1,2,3])
s = s*3 # 报错 TypeError: unsupported operand type(s) for *: 'set' and 'int'

3.3 集合不能拼接

s1 = set([1,2,3])
s2 = set([4,5,6])
s1+s2 # TypeError: unsupported operand type(s) for +: 'set' and 'set'

4. 集合的常用方法

4.1 增

add()

  • 添加一个没出现过的元素到集合中
s = {1, 2, 3}
s.add(4)
print(s) # {1, 2, 3, 4}

update()

  • s.update(iteratable object)参数为可迭代对象。会将iteratable object里元素中没有出现在s里的元素添加到s
s = {1, 2, 3}
other = (3,4,5) # 也可以是集合、列表
s.update(other)
print(s) # {1, 2, 3, 4, 5}

4.2 删

remove()

  • 语法: s.remove(x)
  • 作用:删除s中的x元素,无返回值,x不存在于s会报错。
s = {1, 2, 3}
s.remove(2)
print(s) # {1, 3}

pop()

  • 语法: s.pop()
  • 作用,删除集合s的一个元素并且返回它。
s = {1, 2, 3}
s.pop() # 返回1
print(s) # {2, 3}

4.3 交集: inintersection 或者 &

  • 求出两个集合(另外一个也可以不是集合,看下面)的共有元素。

4.3.1 inintersection

  • 语法:s1.inintersection(可迭代对象)
s1 = {1,2,3,4}
s2 = {3,4,5,6}
s3 = (3,4,5,6) # 元祖、列表等也行
s1.intersection(s2) # 返回{3, 4}
s1.intersection(s2) # 返回{3, 4}

4.3.2 inintersection_update

  • 语法:s1.inintersection_update(可迭代对象s2)
  • 作用:求出s1和s2的交集,并且更新s1=这个交集
s1 = {1,2,3,4}
s2 = {3,4,5,6}
s1.intersection_update(s2)
print(s1) # {3, 4}

4.3.3 &

  • 语法: s1 & s2 ,这时候s1和s2必须是集合
  • 等价于上面inintersection方法

4.3.3 &=

  • 语法: s1 &= s2 ,这时候s1和s2必须是集合
  • 等价于上面inintersection_update方法,会更新s1

4.4 并集:union 或 |

  • 语法:s1.union(s2) 或者 s1 | s2
  • 返回既出现在s1也出现在s2里的元素集合
  • 其他细节等同于上面交集,没有方法 union_update,但是可以 |=

4.5 差集:difference 或者 —

  • 语法:s1.difference(s2) 或者 s1 - s2
  • 返回只在s1不出现在s2的元素
  • 其他细节等同于上面交集,有方法difference _update,也可以 s1 -= s2

4.6 异或集:symmetric_difference 或者 ^\

  • 语法:s1.symmetric_difference(s2) 或者 s1^s2
  • 返回只在s1出现以及只在s2出现的元素集合。可以认为是s1-s2以及s2-s1的并集
  • 其他细节等同于上面交集,有方法symmetric_difference_update,也可以 s1 ^= s2

4.7 子集/超集:

子集:issubset 或者 <=

  • 语法:s1.issubset (s2) 或者 s1 <= s2
  • 作用:判断s1 是否是s2的子集。当s1=s2时,s1也是s2的子集
  • 返回: True或者False
s1 = {1,2}
s2 = {1,2,3,4}
s3 = {1,2}

s1.issubset(s2) # True
s1.issubset(s3) # True
# 等价于
s1 <= s2   # True
s1 <= s3  # True

真子集 <

  • 语法:s1 <= s2
  • 作用:判断s1 是否是s2的真子集。当s1=s2时,s1不是s2的真子集
  • 返回: True或者False
s1 = {1,2}
s2 = {1,2,3,4}
s3 = {1,2}

s1 < s2 # True
s1 < s3 # False

超集:s1.issuperset 或 >

  • 和上面类似,不做阐述。

4.8 判断集合是否互斥:isdisjoint

s1 = {1,2}
s2 = {2,3}
s3 = {3,4}
s1.isdisjoint(s2) # False
s1.isdisjoint(s3) # True

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值