Python set(集合) 这一定是最全的介绍集合的博文
时间:2022-04-26
本文章向大家介绍Python set(集合) 这一定是最全的介绍集合的博文,主要内容包括Python set基本操作、集合数学运算并、交、差、对称差操作符、基本操作、集合本身的增、删、集合数学运算之并(union)、交(intrersection) 、差(difference)方法、集合数学运算之对称差symmetric_difference方法、操作符和方法的等价性、判断、转换、基本概念、基础应用、原理机制和需要注意的事项等,并结合实例形式分析了其使用技巧,希望通过本文能帮助到大家理解应用这部分内容。
Python的set是一个无序且无重复元素的集合,概念上相当于数学上的无序集,数据结构上相当于dict的键。 既然set是集合,则必然可以实现并、交、差、对称差等集合运算。 set是一组无序排列的可哈希的值,因此可以用作字典中的键。set和之前介绍的list、tuple、dict等一样,可以使用in操作符检查元素是否在集合中存在,使用len()求得集合元素的个数,使用for循环迭代其成员,使用copy()返回一个浅复制。不同之处在于集合本身无序,所以没有索引,就不能实现索引和切片操作。
set具有以下特性:
- 元素不重复出现
- 元素必须是不可变对象
你可以把set当作是dict中的键来理解,当然仅仅限于数据结构层面。
Python set基本操作
创建
#调用set方法创建
s = set() #创建空set
a = set('apple') #以字符串创建set
b = set(['p', 'p', 'a', 'l', 'e']) #以list创建set
c = set({'key1':'value1', 'key2':'value2', 'key3': 'value3'}) #以dict创建set
#使用"="创建
d = {'key1', 'key2', 'key3'}
e = {('key1', 'key2', 'key3')} #使用tuple创建
print(a,type(a))
print(b,type(b))
print(c,type(c))
print(d,type(d))
print(e,type(e))
执行结果为:
·无序无重复元素
集合数学运算并、交、差、对称差操作符
a = t | s # t 和 s的并集
b = t & s # t 和 s的交集
c = t – s # 求差集(求在t中,但不在s中的元素)
d = t ^ s # 对称差集(求在t或s中,但不会同时出现在二者中的元素)
基本操作
集合本身的增、删
>>>s = set([1, 2, 3, 4])
>>>s
{1, 2, 3, 4}
>>> s.add(5) #增加元素
>>> s
{1, 2, 3, 4, 5}
>>> s.remove(5) #删除元素5
>>> s.discard(4) #删除元素4
>>> s.pop() #移除某个元素(在有序数据集pop方法移除末尾元素,无序数据集则不确定)
>>> 1
{2, 3}
>>> s.update([1, 4, 5]) #添加多个元素
>>> s
{1, 2, 3, 4, 5}
>>> s.clear() #清空所有元素
>>> s
set() #即空集
集合数学运算之并(union)、交(intrersection) 、差(difference)方法
a = {11, 22, 33}
b = {22, 33, 44}
#并集
t = a.union(b) #取并集
print(t) #{33, 22, 11, 44}
#交集
t1 = a.intersection(b) #取交集
t2 = a.intersection_update #取交集并用交集更新a本身
#差集
box1 = a.difference(b)
#相当于数学上的集合a - b 即取差集
print(box1) #{11}
print(a) #{33, 11, 22}
box2 = a.difference_update(b)
#取差集 并用这些元素覆盖a本身
print(box2) #None
print(a) #{11}
集合数学运算之对称差symmetric_difference方法
a = {11, 22, 33}
b = {22}
temp1 = a.symmetric_difference(b) #合并不同项(求对称差)
print(temp1) #{33, 11}
print(a) #{33, 11, 22}
temp2 = a.symmetric_difference_update(b) #合并不同项,并更新a本身
print(temp2) #None
print(se) #{33, 11}
操作符和方法的等价性
s.update(t)
s |= t
返回增加了 set “t”中元素后的 set “s”
s.intersection_update(t)
s &= t
返回只保留含有 set “t”中元素的 set “s”
s.difference_update(t)
s -= t
返回删除了 set “t”中含有的元素后的 set “s”
s.symmetric_difference_update(t)
s ^= t
返回含有 set “t”或者 set “s”中有而不是两者都有的元素的 set “s”
判断
a = {11,22, 33}
b = {22, 33}
print(a.isdisjoint(b)) #判断是否不存在交集 False
#请注意, 没有isjoint(判断是否存在交集这种方法)
print(a.issubset(b)) #判断a是否是b的子集合 False
print(a.issuperset(b)) #判断a是否是b的父集合 True
转换
set = set(range(4)) #range(4)方法返回从0到4,不包括4的lsit
list = list(set)
tuple = tuple(set)
str = str(set)
print(type(list), list)
print(type(tuple), tuple)
print(type(str), str)
- 有没有必要把机器学习算法自己实现一遍?
- python中从str中提取元素到list以及将list转换为str
- 简单易学的机器学习算法——线性回归(2)
- Java基础-26(01)总结网络编程
- undo retention的思考(一)
- 优化算法——人工蜂群算法(ABC)
- 用GPU加速深度学习: Windows安装CUDA+TensorFlow教程
- 由报警邮件分析发现的备库oracle bug(r7笔记第12天)
- Python中的__init__()方法整理中(两种解释)
- 如何找到最优学习率?
- 简单易学的机器学习算法——Rosenblatt感知机
- 多级复制的数据不同步问题(r7笔记第11天)
- 简单易学的机器学习算法——Logistic回归
- Python 用OPEN读文件报错 ,路径以及r
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法