Python3之集合(Set)浅谈

日期:2019年12月10日
作者:Commas
注释:学习就是为了忘记,让我们来总结一下Python3的集合吧。
如果您想了解更多有关Python的知识,那么请点【我】
《我的Python浅谈系列目录》



一、集合的定义

(1)定义

  • 数学:
    集合是指具有某种特定性质的具体的或抽象的对象汇总而成的集体。其中,构成集合的这些对象则称为该集合的元素。
  • Python:
    集合(Set)是一个无序不重复元素序列。
# 创建集合的方法:
# NO1:{}法
num_set = {1, 2, 3}
print(num_set)         # {1, 2, 3}
print(type(num_set))   # <class 'set'>
# NO2:set()
num_set = set([1, 2, 3])
print(num_set)         # {1, 2, 3}
print(type(num_set))   # <class 'set'>
empty_set = set()      # 空集合
print(empty_set)       # set()
print(type(empty_set)) # <class 'set'>

温馨提醒:
创建一个空集合必须用 set() 而不是 { },因为 { } 是用来创建一个空字典的。

创建格式:

(2)特性

  1. 确定性
    元素要么在集合内,要么不在集合内,一定是确定的。
  2. 互异性
    在同一个集合中,元素是唯一的,表现为互异性。
  3. 无序性
    每个元素的地位都是相同的,元素之间是无序的。

二、集合的方法

获取“字典方法”的方法如下:
Python语句:print(dir(set()))
控制台输出:
[‘and’, ‘class’, ‘contains’, ‘delattr’, ‘dir’, ‘doc’, ‘eq’, ‘format’, ‘ge’, ‘getattribute’, ‘gt’, ‘hash’, ‘iand’, ‘init’, ‘init_subclass’, ‘ior’, ‘isub’, ‘iter’, ‘ixor’, ‘le’, ‘len’, ‘lt’, ‘ne’, ‘new’, ‘or’, ‘rand’, ‘reduce’, ‘reduce_ex’, ‘repr’, ‘ror’, ‘rsub’, ‘rxor’, ‘setattr’, ‘sizeof’, ‘str’, ‘sub’, ‘subclasshook’, ‘xor’, ‘add’, ‘clear’, ‘copy’, ‘difference’, ‘difference_update’, ‘discard’, ‘intersection’, ‘intersection_update’, ‘isdisjoint’, ‘issubset’, ‘issuperset’, ‘pop’, ‘remove’, ‘symmetric_difference’, ‘symmetric_difference_update’, ‘union’, ‘update’]

(1)增删操作

方法说明
add(element)添加一个元素element到集合
clear()清空这个集合中的所有元素
copy()返回一个浅复制集合的副本
update(*s:Iterable)给集合添加元素
pop()随机移除并返回一个元素,若集合为空集合,则抛出KeyError异常
remove(element)移除指定元素element,若移除的元素不在该集合内,则抛出KeyError异常
discard(element)移除指定元素element,若移除的元素不在该集合内,则不做任何操作
empty_set = set()
print(empty_set)        # set()
empty_set.add(1)        # {1}
empty_set.add("1")      # {1, '1'}
empty_set.update({'a', 'b'})
print(empty_set)        # {'a', 1, 'b', '1'}
empty_set.clear()
print(empty_set)        # set()

str_set = {'a', 'b', 'c', '1', '2', '3'}
print(str_set)          # {'1', '2', 'a', '3', 'b', 'c'}
print(str_set.pop())    # 1
print(str_set)          # {'2', 'a', '3', 'b', 'c'}
str_set.remove('a')
print(str_set)          # {'2', '3', 'b', 'c'}
str_set.discard('q')    # do nothing
print(str_set)          # {'2', '3', 'b', 'c'}

(2)判断操作

方法说明
isdisjoint(*s:Iterable)判断两个集合有交集,若没有则返回True,若有则返回False
issubset(*s:Iterable)判断指定集合是否为该方法参数集合的子集
issuperset(*s:Iterable)判断该方法的参数集合是否为指定集合的子集
num1_set = {1, 2}
num2_set = {1, 2, 3}
print(num2_set.isdisjoint(num1_set))    # False
print(num2_set.issubset(num1_set))      # False
print(num2_set.issuperset(num1_set))    # True

(3)交集

在这里插入图片描述

方法说明
intersection(*s:Iterable)返回两个集合的交集(新集合)
intersection_update(*s:Iterable)返回一个集合的交集,不同于intersection()方法(返回一个新集合),而是直接在第一个集合中移除不同的元素
# NO1:使用【&】取交集
num1_set = {1, 2, 3, 4}
num2_set = {3, 4, 5, 6}
new_num_set = num1_set & num2_set
print(new_num_set)      # {3, 4}

# NO2:使用【intersection()方法】取交集
num1_set = {1, 2, 3, 4}
num2_set = {3, 4, 5, 6}
new_num_set = num1_set.intersection(num2_set)
print(new_num_set)      # {3, 4}

# NO3:使用【intersection_update()方法】取交集
num1_set = {1, 2, 3, 4}
num2_set = {3, 4, 5, 6}
num1_set.intersection_update(num2_set)
print(num1_set)         # {3, 4}

num1_set = {1, 2, 3, 4}
num2_set = {3, 4, 5, 6}
num2_set.intersection_update(num1_set)
print(num2_set)         # {3, 4}

(4)反交集(交集取反)

在这里插入图片描述

方法说明
symmetric_difference(*s:Iterable)返回两个集合中不重复的元素集合。
symmetric_difference_update(*s:Iterable)移除当前集合中在另外一个指定集合相同的元素,并将另外一个指定集合中不同的元素插入到当前集合中。
# NO1:使用【^】取反交集(交集取反)
num1_set = {1, 2, 3, 4}
num2_set = {3, 4, 5, 6}
new_num_set = num1_set ^ num2_set
print(new_num_set)      # {1, 2, 5, 6}

# NO2:使用【symmetric_difference()方法】取反交集(交集取反)
num1_set = {1, 2, 3, 4}
num2_set = {3, 4, 5, 6}
new_num_set = num1_set.symmetric_difference(num2_set)
print(new_num_set)      # {1, 2, 5, 6}

# NO3:使用【symmetric_difference_update()方法】取反交集(交集取反)
num1_set = {1, 2, 3, 4}
num2_set = {3, 4, 5, 6}
num1_set.symmetric_difference_update(num2_set)
print(num1_set)         # {1, 2, 5, 6}

num1_set = {1, 2, 3, 4}
num2_set = {3, 4, 5, 6}
num2_set.symmetric_difference_update(num1_set)
print(num2_set)         # {1, 2, 5, 6}

(5)并集

在这里插入图片描述

方法说明
union(*s:Iterable)返回两个或多个集合的并集(新集合)
# NO1:使用【|】取并集
num1_set = {1, 2, 3, 4}
num2_set = {3, 4, 5, 6}
new_num_set = num1_set | num2_set
print(new_num_set)      # {1, 2, 3, 4, 5, 6}

# NO2:使用【union()方法】取并集
num1_set = {1, 2, 3, 4}
num2_set = {3, 4, 5, 6}
new_num_set = num1_set.union(num2_set)
print(new_num_set)      # {1, 2, 3, 4, 5, 6}

(6)差集

(i)A-B差集示意图:在这里插入图片描述
(ii)B-A差集示意图:在这里插入图片描述

方法说明
difference(*s:Iterable)返回两个或多个集合之间的差集(新集合)
difference_update(*s:Iterable)返回一个集合的差集,不同于difference()方法(返回一个新集合),而是直接在第一个集合中移除相同的元素
# NO1:使用【-】取交集
num1_set = {1, 2, 3, 4}
num2_set = {3, 4, 5, 6}
new_num_set = num1_set - num2_set
print(new_num_set)      # {1, 2}
new_num_set = num2_set - num1_set
print(new_num_set)      # {5, 6}

# NO2:使用【difference()方法】取交集
num1_set = {1, 2, 3, 4}
num2_set = {3, 4, 5, 6}
new_num_set = num1_set.difference(num2_set)
print(new_num_set)      # {1, 2}
new_num_set = num2_set.difference(num1_set)
print(new_num_set)      # {5, 6}

# NO3:使用【intersection_update()方法】取交集
num1_set = {1, 2, 3, 4}
num2_set = {3, 4, 5, 6}
num1_set.difference_update(num2_set)
print(num1_set)         # {1, 2}

num1_set = {1, 2, 3, 4}
num2_set = {3, 4, 5, 6}
num2_set.difference_update(num1_set)
print(num2_set)         # {5, 6}

三、利用集合特性给列表去重

num_list = [1, 1, 2, 3, 3, 3]
num_set = set(num_list)		# 集合互异性去重
num_list = list(num_set)	# 集合转换回列表
print(num_set)      		# {1, 2, 3}
print(num_list)     		# [1, 2, 3]

本文参考:
1、https://baike.baidu.com/item/%E9%9B%86%E5%90%88/2908117?fr=aladdin#1
2、https://www.runoob.com/python3/python3-set.html


版权声明:本文为博主原创文章,如需转载,请给出:
原文链接:https://blog.csdn.net/qq_35844043/article/details/103456195

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值