日期: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)特性
确定性
元素要么在集合内,要么不在集合内,一定是确定的。互异性
在同一个集合中,元素是唯一的,表现为互异性。无序性
每个元素的地位都是相同的,元素之间是无序的。
二、集合的方法
获取“字典方法”的方法如下:
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扫描二维码关注公众号,回复: 8799038 查看本文章
版权声明:本文为博主原创文章,如需转载,请给出:
原文链接:https://blog.csdn.net/qq_35844043/article/details/103456195