萌新学 Python 之集合 set

集合 set:使用一对大括号,元素写在大括号之间,使用逗号分隔

集合中的元素只能是不可变的数据类型,不能是列表、字典和集合

set1 = {1, 2, 3}
set2 = {1, 'a', (1, 2, 3)}
print(type(set1), type(set2))  # <class 'set'> <class 'set'>
print(set1, set2)  # {1, 2, 3} {1, 'a', (1, 2, 3)}

集合自动去重且无序

set3 = {3, 3, 2, 2, 1, 1}
print(set3)        # {1, 2, 3}

集合需要注意以下几点:

1.集合属于可变的数据类型

2.集合有去重功能,对元素自动去重

3.集合的元素只能是不可变的类型(数值、字符串、元组),不能使用列表、字典、集合

4.集合 set 与字典 map,都是以 hash 值分布存储,是无序的数据结构

5.空集合不能直接使用一对大括号,空字典才使用 { }

可以使用 set 创建集合

格式:set(可迭代对象)

对象为字典,获取字典的键 key

set4 = set()
print(type(set4), set4)       # <class 'set'> set()

# 对象为字符串,去重且无序
set5 = set('Hello')
print(type(set5), set5)       # <class 'set'> {'H', 'o', 'l', 'e'}

# 对象为列表、元组、集合
set6 = set((1, 2))
print(type(set6), set6)       # <class 'set'> {1, 2}

# 对象为字典,获取字典的键key
set7 = set({'name': 'zhangsan', 'age': 18})
print(type(set7), set7)       # <class 'set'> {'name', 'age'}

集合的运算与运算符:

交集 &     并集 |     补集 ^     差集 -

交集 & ,返回两个集合中出现相同的元素,intersection

并集 | ,返回两个集合的全部元素,union

补集 ^ ,返回两个集合中不同的元素,symmetric_difference

差集 - ,对两个集合进行减法运算,difference

# 交集 &,返回两个集合中出现相同的元素
s1 = {1, 2, 3, 4, 5}
s2 = {1, 2, 3, 8, 9}
print(s1 & s2)                # {1, 2, 3}
print(s1.intersection(s2))    # {1, 2, 3}

# 并集 |,返回两个集合的全部元素
s3 = {1, 2, 3}
s4 = {2, 3, 4}
print(s3 | s4)         # {1, 2, 3, 4}  集合去重
print(s3.union(s4))    # {1, 2, 3, 4}

# 补集 ^,返回两个集合中不同的元素
s5 = {1, 2, 3, 4, 5}
s6 = {1, 2, 3}
print(s5 ^ s6)                           # {4, 5}
print(s5.symmetric_difference(s6))       # {4, 5}

# 差集 -,对两个集合进行减法运算
s7 = {1, 2, 3, 4, 5}
s8 = {4, 5, 6, 7, 8}
print(s7 - s8)               # {1, 2, 3}
print(s7.difference(s8))     # {1, 2, 3}
print(s8 - s7)               # {8, 6, 7}   集合无序
print(s8.difference(s7))     # {8, 6, 7}

集合更新 update:原集合上更新新集合

集合 1.intersection_update(集合 2),把交集后的元素更新到集合 1 中

集合 1.update(集合 2),把并集后的元素更新到集合 1 中

集合 1.symmetric_difference_update(集合 2),把补集后的元素更新到集合 1 中

集合 1.difference_update(集合 2),把差集后的元素更新到集合 1 中

# 交集更新
set8 = {1, 2, 3}
set9 = {3, 4, 5}
set8.intersection_update(set9)
print(set8)      # {3}

# 并集更新
set8 = {1, 2, 3}
set9 = {3, 4, 5}
set8.update(set9)
print(set8)      # {1, 2, 3, 4, 5}

# 补集更新
set8 = {1, 2, 3}
set9 = {3, 4, 5}
set8.symmetric_difference_update(set9)
print(set8)     # {1, 2, 4, 5}

# 差集更新
set8 = {1, 2, 3}
set9 = {3, 4, 5}
set8.difference_update(set9)
print(set8)    # {1, 2}

集合增加元素:add(元素)

集合增加的元素只能是不可变的数据类型,比如数值、字符串和元组

不能是列表、字典这些可变的数据类型,否则会报错

set10 = set()      # 空集合
set10.add(1)
set10.add('a')
set10.add((1, 'a'))
print(set10)       # {(1, 'a'), 1, 'a'}

集合元素的删除:

1. pop(),随机删除

2. remove(指定元素),删除指定元素,元素不存在则报错

set11 = {1, 'a', 2, 'b'}
# remove(指定元素) 删除
print(set11.remove('b'))       # None
print(set11)                   # {1, 2, 'a'}

3. clear(),清空集合的元素,返回空集合

set11 = {1, 'a', 2, 'b'}
# clear(),清空集合的元素,返回空集合
set11.clear()
print(set11)          # set()

4. discard(指定元素),删除指定元素,元素不存在,不会报错

set11 = {1, 'a', 2, 'b'}
# discard(指定元素),元素不存在,不会报错
print(set11.discard('c'))     # None
print(set11)                  # {1, 2, 'a', 'b'}

is 开头的函数用来做判断,结果返回布尔值 True、False

集合 1.issubset(集合 2),判断集合 1 是否是集合 2 的子集,如果是返回 True,不是则返回 False

集合 1.issuperset(集合 2),判断集合 2 是否是集合 1 的子集,如果是返回 True,不是则返回 False

集合 1.isdisjoint(集合 2),判断两个集合是否有相同的元素,有相同元素返回 False,没有相同元素返回 True

set12 = {1, 2, 3}
set13 = {1, 2, 3, 4, 5}
# 集合1.issubset(集合2),判断集合 1 是否是集合 2 的子集
print(set12.issubset(set13))     # True

# 集合1.issuperset(集合2),判断集合 2 是否是集合 1 的子集
print(set13.issuperset(set12))   # True

# 集合1.isdisjoint(集合2),判断两个集合是否有相同的元素,有相同元素返回 False,没有相同元素返回 True
print(set12.isdisjoint(set13))   # False

copy 浅拷贝:

set14 = {1, 2, 3, 4, 5}
set15 = set14.copy()
print(set14, id(set14))    # {1, 2, 3, 4, 5} 2100890355520
print(set15, id(set15))    # {1, 2, 3, 4, 5} 2100890355744
print(set14 is set15)      # False
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值