【Python零基础入门笔记 | 08】无序、不重复、元素只读,Python数据容器之集合

这是机器未来的第12篇原创文章

写在前面:

  • 博客简介:专注AIoT领域,追逐未来时代的脉搏,记录路途中的技术成长!
  • 专栏简介:本专栏的核心就是:快!快!快!2周快速拿下Python,具备项目开发能力,为机器学习和深度学习做准备。
  • 面向人群:零基础编程爱好者
  • 专栏计划:接下来会逐步发布跨入人工智能的系列博文,敬请期待
    • Python零基础快速入门系列
    • 快速入门Python数据科学系列
    • 人工智能开发环境搭建系列
    • 机器学习系列
    • 物体检测快速入门系列
    • 自动驾驶物体检测系列
  • 原文首发链接:https://blog.csdn.net/RobotFutures/article/details/125039175

【Python零基础入门笔记 | 08】无序、不重复、元素只读,Python数据容器之集合_第1张图片

文章目录

  • 1. 集合概述
  • 2. 集合的定义
    • 2.1 set()函数
    • 2.2 花括号{}
    • 2.3 集合的特性
  • 3. 集合的常用用法
    • 3.1 添加
    • 3.2 删除
    • 3.3 修改
    • 3.4 读取
    • 3.5 集合运算
    • 3.5 集合推导式
  • 4. 总结

1. 集合概述

集合(set)是一个无序的不重复元素序列。集合是可变数据类型,但是其元素是不可变数据类型。它是一种存储数据的容器。

2. 集合的定义

集合的定义可以通过set()函数和花括号{}来定义。

2.1 set()函数

首先看一下set函数的定义

【Python零基础入门笔记 | 08】无序、不重复、元素只读,Python数据容器之集合_第2张图片

从上图中可以看到set函数可以支持参数为空或参数为可迭代对象

  • 参数为空时, 定义空集合
x = set()
print(x, type(x))

【Python零基础入门笔记 | 08】无序、不重复、元素只读,Python数据容器之集合_第3张图片

  • 参数为可迭代对象时
x = set([1, 2, 3, 4, -7])       # 输入参数为列表
print(x, type(x))

【Python零基础入门笔记 | 08】无序、不重复、元素只读,Python数据容器之集合_第4张图片

x = set((1, 2, 3, 4, -7))       # 输入参数为元组
print(x, type(x))

【Python零基础入门笔记 | 08】无序、不重复、元素只读,Python数据容器之集合_第5张图片

x = set({1:25, 2:36, 3:-9, 4:20, -7:89})    # 输入参数为字典:仅取字典的key
print(x, type(x))

【Python零基础入门笔记 | 08】无序、不重复、元素只读,Python数据容器之集合_第6张图片

x = set({1, 2, 3, 4, -7})   # 输入参数为集合,相当于复制
print(x, type(x))

【Python零基础入门笔记 | 08】无序、不重复、元素只读,Python数据容器之集合_第7张图片

x1 = {1, 2, 3, 4, -7}
x2 = set(x1)   # 输入参数为集合,相当于复制-深拷贝
x3 = x1
print(x1, type(x1), id(x1), x2, type(x2), id(x2), x3, type(x3), id(x3))

【Python零基础入门笔记 | 08】无序、不重复、元素只读,Python数据容器之集合_第8张图片

2.2 花括号{}

  • 定义空集合只能使用set()函数,因为{}也是字典的符号,数据为空的{}表示空字典。
x = {}
print(x, type(x))

【Python零基础入门笔记 | 08】无序、不重复、元素只读,Python数据容器之集合_第9张图片

可以看到,type(x)返回的数据类型为dict字典

  • 含有数据集的集合定义
x = {-1, 3+6j, 'ahc', 1e-5}
print(x, type(x))

【Python零基础入门笔记 | 08】无序、不重复、元素只读,Python数据容器之集合_第10张图片

2.3 集合的特性

  • 确定性

集合中的元素是不可变数据类型,例如数值类型、字符串类型、元组类型,而列表、字典、集合不可以是集合的元素, 它们都是可变数据类型。

x = {[1, 2, 3, 4], 5, 3+6j, 1e12, 'ahdhss'}

【Python零基础入门笔记 | 08】无序、不重复、元素只读,Python数据容器之集合_第11张图片

x = {{1:66, 2:77, 3:88, 4:99}, 5, 3+6j, 1e12, 'ahdhss'}

【Python零基础入门笔记 | 08】无序、不重复、元素只读,Python数据容器之集合_第12张图片

# 集合是可变数据类型,但是集合中的元素是不可变数据类型,集合中的元素是可以更改的
x = {{1, 2, 3, 4}, 5, 3+6j, 1e12, 'ahdhss'} 

【Python零基础入门笔记 | 08】无序、不重复、元素只读,Python数据容器之集合_第13张图片

特别注意:集合是可变数据类型,但是集合中的元素是不可变数据类型,集合中的元素是可以更改的

x = {(1, 2, 3, 4), 5, 3+6j, 1e12, 'ahdhss'}
print(x, type(x))

【Python零基础入门笔记 | 08】无序、不重复、元素只读,Python数据容器之集合_第14张图片

  • 互异性

集合中的元素是不可重复的,如果添加的值已存在于集合中,则不会添加。

x = {4, 1, 3, 4, 1, 2}
x

【Python零基础入门笔记 | 08】无序、不重复、元素只读,Python数据容器之集合_第15张图片

从上图中可以看到,集合定义时存在的两个4和两个1,均只保留一个,且集合元素始终从小到大排列。

根据集合的互斥性,可以用来处理列表或元组去重处理。

xl = [4, 1, 3, 4, 1, 2]
xs = set(xl)
xl = list(xs)
xl

【Python零基础入门笔记 | 08】无序、不重复、元素只读,Python数据容器之集合_第16张图片

  • 无序性

集合中的元素是无序的,无法通过索引访问,只能通过遍历的方式访问。

x = {4, 1, 3, 4, 1, 2}
x[0]

【Python零基础入门笔记 | 08】无序、不重复、元素只读,Python数据容器之集合_第17张图片

x = {4, 1, 3, 4, 1, 2}
for i in x:
    print(i, end=', ')

【Python零基础入门笔记 | 08】无序、不重复、元素只读,Python数据容器之集合_第18张图片

3. 集合的常用用法

x = {4, 1, 3, 4, 1, 2}
dir(x)

输出如下:

['__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']

3.1 添加

集合使用add函数添加元素,注意事项:如果添加的元素在集合中已存在,则不会添加

x = {1, 4, 7}   
x.add(3+9j)     # 添加一个复数到集合中
x

【Python零基础入门笔记 | 08】无序、不重复、元素只读,Python数据容器之集合_第19张图片

x.add(1)        # 如果添加的元素在集合中已存在,则不会添加
x

【Python零基础入门笔记 | 08】无序、不重复、元素只读,Python数据容器之集合_第20张图片

3.2 删除

删除元素的方法有4种,pop()、remove()、discard()和clear()

  • pop()函数

​ pop()函数可以随机从集合中取出一个元素,取出后该元素将不在集合中。

x = {1, 4, 7, 3+9j} 
y = x.pop()
print(f"x = {x}, y = {y}")

【Python零基础入门笔记 | 08】无序、不重复、元素只读,Python数据容器之集合_第21张图片

  • remove()函数

remove()函数可以指定元素从集合中删除,如果元素不存在则会报错

x = {1, 4, 7, 3+9j} 
y = x.remove(3+9j)      # 仅仅删除,不返回删除的值
print(f"x = {x}, y = {y}")

【Python零基础入门笔记 | 08】无序、不重复、元素只读,Python数据容器之集合_第22张图片

元素不存在的场景:

x = {1, 4, 7, 3+9j} 
y = x.remove(3+8j)      # 仅仅删除,不返回删除的值
print(f"x = {x}, y = {y}")

【Python零基础入门笔记 | 08】无序、不重复、元素只读,Python数据容器之集合_第23张图片

  • discard()删除指定元素-不存在不报错
x = {1, 4, 7, 3+9j} 
y = x.discard(3+8j)      # 不存在不报错
print(f"x = {x}, y = {y}")

【Python零基础入门笔记 | 08】无序、不重复、元素只读,Python数据容器之集合_第24张图片

  • clear()清除集合
x = {1, 4, 7, 3+9j} 
x.clear()
x

【Python零基础入门笔记 | 08】无序、不重复、元素只读,Python数据容器之集合_第25张图片

3.3 修改

集合不可以使用索引访问,因此如果需要修改,则执行先remove,再add

3.4 读取

x = {4, 1, 3, 4, 1, 2}
for i in x:
    print(i, end=', ')

【Python零基础入门笔记 | 08】无序、不重复、元素只读,Python数据容器之集合_第26张图片

3.5 集合运算

【Python零基础入门笔记 | 08】无序、不重复、元素只读,Python数据容器之集合_第27张图片

  • 交集

​ 两个集合共同存在的部分,即为交集。

x1 = {1, 2, 4, 7}
x2 = {4, 7, 9, 11}
x = x1.intersection(x2)
x

【Python零基础入门笔记 | 08】无序、不重复、元素只读,Python数据容器之集合_第28张图片

集合x1和集合x2共有的元素是4,7,因此交集为{4, 7}。

使用交集运算符&,也可以达成同样的结果

x1 = {1, 2, 4, 7}
x2 = {4, 7, 9, 11}
x = x1 & x2
x

【Python零基础入门笔记 | 08】无序、不重复、元素只读,Python数据容器之集合_第29张图片

  • 并集

两个集合的并集就是两个集合中所有的元素组合在一起形成的新的集合,即为并集。

x1 = {1, 2, 4, 7}
x2 = {4, 7, 9, 11}
x = x1.union(x2)
x

x1 = {1, 2, 4, 7}
x2 = {4, 7, 9, 11}
x = x1 | x2
x

【Python零基础入门笔记 | 08】无序、不重复、元素只读,Python数据容器之集合_第30张图片

  • 差集

A,B是两个集合,由所有属于A且不属于B的元素组成的集合,叫做集合A减集合B, 即为集合A对集合B的差集,相应的也有集合B对集合A的差集。

A对B的差集

x1 = {1, 2, 4, 7}
x2 = {4, 7, 9, 11}
x = x1.difference(x2)
x

x1 = {1, 2, 4, 7}
x2 = {4, 7, 9, 11}
x = x1 - x2
x

【Python零基础入门笔记 | 08】无序、不重复、元素只读,Python数据容器之集合_第31张图片

B对A的差集

x1 = {1, 2, 4, 7}
x2 = {4, 7, 9, 11}
x = x2.difference(x1)		# 或x = x2 - x1
x

【Python零基础入门笔记 | 08】无序、不重复、元素只读,Python数据容器之集合_第32张图片

  • 对称差集

集合A与集合B的对称差集定义为集合A与集合B中所有不属于A∩B的元素的集合,记为A△B

x1 = {1, 2, 4, 7}
x2 = {4, 7, 9, 11}
x = x1.symmetric_difference(x2)     # 或x = x1 ^ x2
x

【Python零基础入门笔记 | 08】无序、不重复、元素只读,Python数据容器之集合_第33张图片

3.5 集合推导式

{输出值 for 遍历的元素 in 列表变量 if 条件语句}

与字典的区别

{key:value for 遍历的元素 in 列表变量 if 条件语句}

字典推导式的输出为键值对,集合的输出为值。

x = {4, 1, 3, 4, 1, 2}
y = {k for k in x if k >= 2}
y

【Python零基础入门笔记 | 08】无序、不重复、元素只读,Python数据容器之集合_第34张图片

4. 总结

以上就是关于集合的基础用法,欢迎大家讨论交流~

《Python零基础快速入门系列》快速导航:

  • Python快速入门系列(1) 人工智能序章:开发环境搭建Anaconda+VsCode+JupyterNotebook(零基础启动)
  • Python快速入门系列(2)一文快速掌握Python基础语法
  • Python快速入门系列(3)AI数据容器底层核心之Python列表
  • Python快速入门系列(4)为什么内存中最多只有一个“Love“?一文读懂Python内存存储机制
  • Python快速入门系列(5)Python只读数据容器:列表List的兄弟,元组tuple
  • Python快速入门系列(6)字符串、列表、元组原来是一伙的?快看序列Sequence

推荐阅读:

  • 物体检测快速入门系列(1)-Windows部署GPU深度学习开发环境
  • 物体检测快速入门系列(2)-Windows部署Docker GPU深度学习开发环境
  • 物体检测快速入门系列(3)-TensorFlow 2.x Object Detection API快速安装手册
  • 物体检测快速入门系列(4)-基于Tensorflow2.x Object Detection API构建自定义物体检测器

【Python零基础入门笔记 | 08】无序、不重复、元素只读,Python数据容器之集合_第35张图片

你可能感兴趣的:(Python零基础快速入门系列,python,开发语言,Python零基础,Python笔记)