当前位置: 首页 > news >正文

Python集合的基本概念和使用方法

目录

集合(Set)

基本概念

基本特性

基本操作

集合运算

成员测试

高级操作

集合推导式

总结


集合(Set)

Python集合(Set)是Python语言中一个非常实用且强大的数据结构,它用于存储多个不重复的元素。集合中的元素可以是任何不可变类型的数据,如整数、浮点数、字符串等,但不能是可变数据类型,如列表或字典。集合提供了一种高效执行集合操作(如并集、交集、差集)的方式,这对于数据处理和分析任务尤为有用。

基本概念

在Python中,集合用set关键字来创建,可以通过花括号{}直接定义,或者使用内置函数set()将其他可迭代对象转换为集合。集合中的元素自动去重,这意味着每个元素在集合中只会出现一次。

# 直接定义集合
>>> my_set = {1, 2, 3, 4}
>>> print(my_set)
{1, 2, 3, 4}# 使用set()函数转换列表为集合
>>> my_list = [1, 2, 2, 3, 4]
>>> my_set_from_list = set(my_list)
>>> print(my_set_from_list)
{1, 2, 3, 4}

注意:空集合只能用set()创建,因为{}代表的是空字典。

>>> type({})
<class 'dict'>
>>> type(set())
<class 'set'>

基本特性

在数学中,集合是由不同元素组成的一个整体,这些元素是无序的,且不重复。Python 的集合类型(set)正是基于这一概念实现的。与列表(list)、元组(tuple)等其他数据结构相比,集合有以下几个显著特性:

  1. 无序性:集合中的元素没有固定的顺序。
  2. 元素唯一性:集合中的所有元素都是唯一的,不会有重复的元素。
  3. 可变:集合是可变的,可以添加或删除元素。
  4. 动态性:集合的大小可以根据需要动态变化。

基本操作

  1. add(element):向集合中添加一个元素。
  2. remove(element):从集合中移除指定元素,如果元素不存在则抛出KeyError异常。
  3. discard(element):与remove相似,但当元素不存在时不会抛出错误。
  4. pop():随机移除并返回集合中的一个元素,集合为空时会抛出KeyError。
  5. clear():移除集合中所有元素,使其成为空集。
  6. copy():集合的复制拷贝。
>>> a = {1,2,3}
>>> a.add(4)
>>> a
{1, 2, 3, 4}
>>> a.remove(4)
>>> a
{1, 2, 3}
>>> a.remove(4)
Traceback (most recent call last):File "<pyshell#11>", line 1, in <module>a.remove(4)
KeyError: 4
>>> a.discard(4)
>>> a.discard(3)
>>> a
{1, 2}
>>> a.pop()
1
>>> a
{2}
>>> a.clear()
>>> a
set()
>>> t = {2,3,4}
>>> t
{2, 3, 4}
>>> s = t.copy()
>>> s
{2, 3, 4}

集合运算

  1. union(other_set) :返回两个集合的并集
  2. intersection(other_set) :返回两个集合的交集
  3. difference(other_set) :返回两个集合的差集
  4. symmetric_difference(other_set) :返回两个集合中不重复的元素集合,也称对称差集

集合运算也能使用运算符操作,以上四种运算分别对应重载运算符: | 、 &、 -、 ^

>>> s = {1,2,3}
>>> t = {2,3,4}
>>> s.union(t)
{1, 2, 3, 4}
>>> s | t
{1, 2, 3, 4}
>>> s.intersection(t)
{2, 3}
>>> s & t
{2, 3}
>>> s.difference(t)
{1}
>>> s - t
{1}
>>> s.symmetric_difference(t)
{1, 4}
>>> s ^ t
{1, 4}

另外对应四个update函数,功能对应相同,但改变当前集合。

  1. update(other_set) :返回两个集合的并集
  2. intersection_update(other_set) :返回两个集合的交集
  3. difference_update(other_set) :返回两个集合的差集
  4. symmetric_difference_update(other_set) :返回两个集合中不重复的元素集合,也称对称差集
>>> s = {1,2,3}
>>> t = {2,3,4}
>>> s.update(t)
>>> s
{1, 2, 3, 4}
>>> t
{2, 3, 4}
>>> s = {1,2,3}
>>> s.intersection_update(t)
>>> s
{2, 3}
>>> s = {1,2,3}
>>> s.difference_update(t)
>>> s
{1}
>>> s = {1,2,3}
>>> s.symmetric_difference_update(t)
>>> s
{1, 4}

注:改变的是原集合的值,四个函数的返回值都是None。

成员测试

  • in 和 not in:检查元素是否属于集合。
>>> s = {1,2,3}
>>> 1 in s
True
>>> 4 in s
False
>>> 1 not in s
False
>>> 4 not in s
True

高级操作

  1. 子集与超集:可以使用 issubset() 和 issuperset() 方法来判断一个集合是否是另一个集合的子集或超集(父集)。
  2. isdisjoint():判断当前集合与另一个集合,是否交集为空。
  3. 幂集:幂集是指一个集合所有可能子集的集合,可以通过递归或迭代的方式生成。
  4. 笛卡尔积:两个集合的笛卡尔积可以通过 itertools.product() 函数实现。

注:比较运算符==、  >、 >=、 < 、<= 也被重载用于父集、子集的比较。

注:笛卡尔积的概念

假设有两个集合 A = {a1, a2, ..., an} 和 B = {b1, b2, ..., bm},它们的笛卡尔积是所有可能的有序对 (ai, bj) 的集合,记作 A×B。

>>> import itertools
>>> s = {1,2,3}
>>> t = {2,3,4}
>>> list(itertools.product(s,t))
[(1, 2), (1, 3), (1, 4), (2, 2), (2, 3), (2, 4), (3, 2), (3, 3), (3, 4)]

集合推导式

类似于列表推导式,集合也可以通过集合推导式快速生成。集合推导式语法简洁,适用于根据已有集合或其他可迭代对象生成新集合。

>>> squares = {x**2 for x in range(10)}
>>> print(squares)
{0, 1, 4, 9, 16, 25, 36, 49, 64, 81}

总结

Python集合是一种无序、不重复元素的集合数据类型,它提供了丰富的操作方法,包括元素的添加、删除、集合运算等。集合在数据处理、算法设计等方面具有广泛的应用,特别是对于需要去重、集合运算的场景,集合的效率和简洁性使其成为首选工具。通过掌握集合的基本操作和高级特性,开发者可以更加灵活高效地处理数据,提升代码的性能和可读性。随着Python在数据分析、机器学习、Web开发等领域的广泛应用,深入理解并有效利用集合功能,已成为Python程序员的一项重要技能。

http://www.lryc.cn/news/368952.html

相关文章:

  • 谷歌浏览器124版本Webdriver驱动下载
  • 十大排序
  • 微信小程序学习笔记(1)
  • OpenGauss数据库-6.表空间管理
  • 相约乌镇 续写网络空间命运与共的新篇章(二)
  • 【全网最简单的解决办法】vscode中点击运行出现仅当从 VS 开发人员命令提示符处运行 VS Code 时,cl.exe 生成和调试才可用
  • NFS共享存储服务
  • Docker面试整理-Docker 常用命令
  • Cinema 4D 2024 软件安装教程、附安装包下载
  • 2024全国高考作文题解读(Chat GPT 4.0版本)
  • 欧美北美南美国外媒体投稿和东南亚中东亚洲媒体海外新闻发稿软文推广营销策略有哪些?
  • Rust-10-数据类型
  • C#面:PDB是什么东西? 在调试中它应该放在哪里
  • C#--使用CMake构建C++程序调用示例
  • 三十七篇:大数据架构革命:Lambda与Kappa的深度剖析
  • Vue3【十五】标签的Ref属性
  • Java实现数据结构——顺序表
  • 线程知识点总结
  • 计算机网络:数据链路层 - 扩展的以太网
  • 视频修复工具,模糊视频变清晰!
  • 协程库——面试问题
  • 数据结构与算法题目集(中文)6-2顺序表操作集
  • 8086 汇编笔记(十二):int 指令 端口 直接定址表
  • 揭开FFT时域加窗的奥秘
  • 【AI基础】第二步:安装AI运行环境
  • 【MySQL】聊聊唯一索引是如何加锁的
  • k8s-CCE使用node节点使用VIP--hostNetworkhostPort
  • 18、关于优化中央企业资产评估管理有关事项的通知
  • AI大模型日报#0610:港大等1bit大模型“解决AI能源需求”、谷歌开源TimesFM时序预测模型
  • 速盾:图片cdn加速 免费