深入理解Python中的集合(Set)

Set和字典一样用{ }表示,不同的是其元素不是键值对,而是一个无序的不重复元素序列。
集合更接近数学上集合的概念,可以通过集合判断数据的从属关系,也可以通过集合把数据结构中重复的元素减掉。集合可做集合运算,可添加和删除元素。

  • 特点

元素无序且不重复
可做集合运算

  • 基础操作

print(‘创建一个空集合必须用set()函数,因为如果直接用{}是用来创建一个空字典的:set():’, set())

print(‘将一个字符串转为集合set(Str):’, set(‘Tommy’))
list = [‘play’, ‘algorithm’, ‘python’, 2019, 5.11, ‘python’]

# 集合中元素无序且不重复,python将只会留下一个
set1 = set(list)
print('将一个列表转为集合 set(list):', set1)

# 判断元素是否在集合内
print("python是否在集合内 'python' in set1:", 'python' in set1)

# 迭代
print('迭代set :')
for item in set1:
    print(item)

# 集合运算
set2 = {1, 2, 3, 4, 5, 6}
set3 = {1, 2, 7, 8}

print('减法,set2中包含但set3中不包含的元素 set2 - set3:', set2 - set3)
print('按位或运算,set2和set3中包含的所有元素 set2 | set3:', set2 | set3)
print('按位与运算,set2和set3中都包含的元素 set2 & set3:', set2 & set3)
print('按位异或运算,set2和set3中不同时包含的元素 set2 ^ set3:', set2 ^ set3)
  • 输出结果
创建一个空集合必须用set()函数,因为如果直接用{}是用来创建一个空字典的:set(): set()

将一个字符串转为集合: {'y', 'o', 'T', 'm'}

将一个列表转为集合: {'algorithm', 2019, 5.11, 'python', 'play'}

python是否在集合内 'python' in set1: True

迭代set :
algorithm
2019
5.11
python
play

减法,set2中包含但set3中不包含的元素 set2 - set3: {3, 4, 5, 6}
按位或运算,set2和set3中包含的所有元素 set2 | set3: {1, 2, 3, 4, 5, 6, 7, 8}
按位与运算,set2和set3中都包含的元素 set2 & set3: {1, 2}
按位异或运算,set2和set3中不同时包含的元素 set2 ^ set3: {3, 4, 5, 6, 7, 8}
  • 基础函数
set1 = {1, 2, 3, 4, 5, 6}
print('set的长度 len(set):', len(set1))
  • 输出结果
set的长度 len(set): 6
  • 基础方法
set1 = {1, 2, 3, 4, 5, 6}
set2 = {4, 5, 6, 7, 8, 9}
set1.add(0)
print('添加元素 set1.add(0)', set1)

# 计算差集,效果同 -
print('返回两个集合的差集 set1.difference(set2)', set1.difference(set2))

print('返回两个集合的差集 set2.difference(set1)', set2.difference(set1))


set1 = {1, 2, 3, 4, 5, 6}
set2 = {4, 5, 6, 7, 8, 9}
# 移除两个集合中都存在的元素
set1.difference_update(set2)
print('移除set1中set1和set2都存在的元素 set1.difference_update(set2)', set1)


set1 = {1, 2, 3, 4, 5, 6}
set2 = {4, 5, 6, 7, 8, 9}
set2.difference_update(set1)
print('移除set2中set1和set2都存在的元素 set2.difference_update(set1)', set2)


# 移除元素
set1 = {1, 2, 3, 4, 5, 6}
set2 = {4, 5, 6, 7, 8, 9}
# 移除指定元素
set1.discard(10)
print("移除的元素不存在时不报错 set1.discard(10):", set1)
set1.remove(6)
print("移除的元素不存在时报错 set1.remove(6):", set1)
# 随机移除元素
set1.pop()
print('随机移除元素后的set1 set1.pop():', set1)

set1 = {1, 2, 3, 4, 5, 6}
set2 = {4, 5, 6, 7, 8, 9}
set3 = {5, 6, 10}
set4 = {5, 6, 7, 8, 9}
print('返回多个集合的交集,set1不变 set1.intersection(set2,set3,set4):', set1.intersection(set2,set3,set4), set1)

set1.intersection_update(set2,set3,set4)
print('set1变为set1与其他集合的交集 set1.intersection_update(set2,set3,set4):', set1)


set1 = {1, 2, 3, 4, 5, 6}
set2 = {4, 5, 6}

print('判断两个集合是否包含相同元素,如果包含返回False set2.isdisjoint(set1):', set2.isdisjoint(set1))

# 子集判断
print('判断set1是否是set2的子集 set1.issubset(set2):', set1.issubset(set2))
print('判断set2是否是set1的子集 set2.issubset(set1):', set2.issubset(set1))

# 父集判断
print('判断set1是否是set2的父集 set1.issuperset(set2):', set1.issuperset(set2))
print('判断set2是否是set1的父集 set2.issuperset(set1):', set2.issuperset(set1))


set1 = {1, 2, 3, 4, 5, 6}
set2 = {4, 5, 6, 9}
print("异或运算 set1.symmetric_difference(set2):", set1.symmetric_difference(set2))
set1.symmetric_difference_update(set2)
print("异或运算后将相同部分移除,不同部分添加到set1中 set1.symmetric_difference_update(set2):", set1)

set1 = {1, 2, 3, 4, 5, 6}
set2 = {4, 5, 6, 7, 8, 9}
set3 = {5, 6, 10}
print('计算集合的合集 set1.union(set2, set3):', set1.union(set2, set3))

set1 = {1, 2, 3, 4, 5, 6}
set2 = {5, 6, 10}
set1.update(set2)
print('将set2中的元素添加到set1中 set1.update(set2):', set1)

print('set.clear() 和 set.copy()用法同列表')
  • 输出结果
添加元素 set1.add(0) {0, 1, 2, 3, 4, 5, 6}

返回两个集合的差集 set1.difference(set2) {0, 1, 2, 3}
返回两个集合的差集 set2.difference(set1) {8, 9, 7}

移除set1中set1和set2都存在的元素 set1.difference_update(set2) {1, 2, 3}
移除set2中set1和set2都存在的元素 set2.difference_update(set1) {7, 8, 9}

移除的元素不存在时不报错 set1.discard(10): {1, 2, 3, 4, 5, 6}
移除的元素不存在时报错 set1.remove(6): {1, 2, 3, 4, 5}
随机移除元素后的set1 set1.pop(): {2, 3, 4, 5}

返回多个集合的交集,set1不变 set1.intersection(set2,set3,set4): {5, 6} {1, 2, 3, 4, 5, 6}
set1变为set1与其他集合的交集 set1.intersection_update(set2,set3,set4): {5, 6}

判断两个集合是否包含相同元素,如果包含返回False set2.isdisjoint(set1): False

判断set1是否是set2的子集 set1.issubset(set2): False
判断set2是否是set1的子集 set2.issubset(set1): True

判断set1是否是set2的父集 set1.issuperset(set2): True
判断set2是否是set1的父集 set2.issuperset(set1): False

异或运算 set1.symmetric_difference(set2): {1, 2, 3, 9}
异或运算后将相同部分移除,不同部分添加到set1中 set1.symmetric_difference_update(set2): {1, 2, 3, 9}

计算集合的合集 set1.union(set2, set3): {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}

将set2中的元素添加到set1中 set1.update(set2): {1, 2, 3, 4, 5, 6, 10}

set.clear() 和 set.copy()用法同列表
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值