Python 学习笔记:集合(Set)

devtools/2024/11/20 22:53:36/
一、概述

集合(Set)是 Python 中的一种内置数据结构,主要用于存储唯一的元素。集合的主要特点包括:

  • 无序性:集合中的元素没有固定的顺序,不能通过索引访问。
  • 唯一性:集合中的每个元素都是唯一的,不能重复。
  • 可变性:集合是可变的,可以动态添加、删除元素。

集合通常用于数据去重、数学集合运算(如并集、交集等)以及高效查找数据。

二、集合的创建

集合可以通过花括号 {}set() 函数来创建。需要注意的是,空集合只能用 set() 函数创建,而使用 {} 创建的是一个空字典。

示例

python"># 使用花括号创建集合
my_set = {1, 2, 3, 4}
print(my_set)  # 输出: {1, 2, 3, 4}# 使用 set() 函数创建集合
another_set = set([1, 2, 3])
print(another_set)  # 输出: {1, 2, 3}# 创建空集合
empty_set = set()
print(empty_set)  # 输出: set()# 创建含重复元素的集合
duplicate_set = {1, 1, 2, 3}
print(duplicate_set)  # 输出: {1, 2, 3}(重复元素被自动去掉)
三、集合的基本操作
1. 添加元素

可以使用 add() 方法向集合中添加一个元素。如果元素已经存在,集合不会发生变化。

示例

python">my_set = {1, 2, 3}
my_set.add(4)
print(my_set)  # 输出: {1, 2, 3, 4}
2. 删除元素

可以使用 remove()discard()pop() 方法删除集合中的元素。

  • remove():如果元素不存在,将引发 KeyError

    python">my_set.remove(2)
    print(my_set)  # 输出: {1, 3, 4}
    
  • discard():如果元素不存在,不会引发错误。

    python">my_set.discard(5)  # 不会报错
    print(my_set)  # 输出: {1, 3, 4}
    
  • pop():随机删除并返回集合中的一个元素。如果集合为空,会引发 KeyError

    python">removed_element = my_set.pop()
    print(removed_element)  # 输出: 随机选择的元素
    print(my_set)           # 输出: 剩下的元素
    
3. 清空集合

使用 clear() 方法可以清空集合中的所有元素。

示例

python">my_set.clear()
print(my_set)  # 输出: set()
4. 集合的长度

使用 len() 函数可以获取集合中元素的数量。

示例

python">my_set = {1, 2, 3}
print(len(my_set))  # 输出: 3
四、集合的数学运算

集合支持多种数学运算,包括并集、交集、差集和对称差集。

1. 并集(Union)

使用 union() 方法或 | 运算符计算并集。

示例

python">set1 = {1, 2, 3}
set2 = {3, 4, 5}
union_set = set1.union(set2)
print(union_set)  # 输出: {1, 2, 3, 4, 5}# 也可以使用 |
union_set = set1 | set2
print(union_set)  # 输出: {1, 2, 3, 4, 5}
2. 交集(Intersection)

使用 intersection() 方法或 & 运算符计算交集。

示例

python">intersection_set = set1.intersection(set2)
print(intersection_set)  # 输出: {3}# 也可以使用 &
intersection_set = set1 & set2
print(intersection_set)  # 输出: {3}
3. 差集(Difference)

使用 difference() 方法或 - 运算符计算差集。

示例

python">difference_set = set1.difference(set2)
print(difference_set)  # 输出: {1, 2}# 也可以使用 -
difference_set = set1 - set2
print(difference_set)  # 输出: {1, 2}
4. 对称差集(Symmetric Difference)

使用 symmetric_difference() 方法或 ^ 运算符计算对称差集。

示例

python">symmetric_difference_set = set1.symmetric_difference(set2)
print(symmetric_difference_set)  # 输出: {1, 2, 4, 5}# 也可以使用 ^
symmetric_difference_set = set1 ^ set2
print(symmetric_difference_set)  # 输出: {1, 2, 4, 5}
五、集合关系运算

集合也支持一些关系运算,比如子集、超集和不相交等:

  • 子集:使用 issubset() 方法检查一个集合是否是另一个集合的子集。

    python">set1 = {1, 2}
    set2 = {1, 2, 3, 4}
    print(set1.issubset(set2))  # 输出: True
    
  • 超集:使用 issuperset() 方法检查一个集合是否是另一个集合的超集。

    python">print(set2.issuperset(set1))  # 输出: True
    
  • 不相交:使用 isdisjoint() 方法检查两个集合是否没有交集。

    python">set3 = {4, 5, 6}
    print(set1.isdisjoint(set3))  # 输出: True
    
六、遍历集合

可以使用 for 循环遍历集合中的元素:

python">my_set = {1, 2, 3, 4}
for element in my_set:print(element)  # 输出: 集合中的每个元素(顺序可能不同)
七、冻结集合(frozenset)

frozenset 是不可变的集合,创建后不能修改。适用于需要集合但不希望其改变的场景。

示例

python">frozen_set = frozenset([1, 2, 3, 4])
print(frozen_set)  # 输出: frozenset({1, 2, 3, 4})# frozen_set.add(5)  # 会引发 AttributeError

http://www.ppmy.cn/devtools/135599.html

相关文章

基于YOLOv8深度学习的智慧农业山羊行为检测系统研究与实现(PyQt5界面+数据集+训练代码)

随着智慧农业的快速发展,利用先进的技术手段对牲畜的行为进行自动化监测和管理,已经成为现代农业中的重要研究方向之一。在传统的农业管理模式中,牲畜的行为监测通常依赖于人工观测,耗时耗力且难以实现大规模实时监控。然而&#…

【EasyExcel等比例缩小导出图片】

EasyExcel等比例缩小导出图片 一、背景二、思路三、代码 一、背景 使用EasyExcel导出excel文件,但是需要同时导出图片信息,且图片信息不能影响行高和单元格宽度,图片本身被导出时,不能因为压缩导致图片变形 二、思路 使用EasyE…

【FMC169】基于VITA57.1标准的4发4收射频子模块(基于ADRV9026)

产品概述 FMC169 是一款基于VITA57.1 标准规范,实现4 收4发的射频子模块,该板卡基于ADI的捷变收发器ADRV9026作为处理核心,射频工作范围为75MHz~6GHz频段,发射最大信号带宽450MHz,接收最大带宽200MHz,提供…

React教程第三节之JSX用法介绍特点

1、JSX 介绍 JSX 是javascript XML的缩写,表示可以再 js 中书写 html 语法;虽然看起来像是 HTML 但是在React 中使用时 Babel 会将 JSX 转化为 javascript 语法; 2、JSX的语法 a、在 大括号中书写表达式: { 表达式 }&#xff1…

卷积神经网络(CNN)对 CIFAR-10 数据集进行图像分类

代码功能 数据预处理:使用 transforms 对图像进行归一化和转换。 模型定义:SimpleCNN 包含两层卷积层和两层全连接层,使用 ReLU 激活函数和最大池化层。 优化器和损失函数:使用 Adam 优化器和交叉熵损失函数。 训练循环&#xff…

LabVIEW多通道面阵烟雾透过率测试系统

LabVIEW面阵烟雾透过率测试系统通过高精度多通道数据采集和实时处理技术,能够实现对固体推进剂烟雾的透过率进行精确测量。系统利用了LabVIEW的图形化编程环境及其丰富的设备驱动接口,有效提升了测试的自动化程度和数据处理的实时性。 项目背景&#xf…

详细分析ipvsadm负载均衡的命令

目录 前言1. 基本知识2. 命令参数3. 拓展 前言 LVS四层负载均衡架构详解Lvs推荐阅读:添加链接描述 1. 基本知识 ipvsadm 是用于管理和配置 Linux 服务器上 IP Virtual Server (IPVS) 的工具,是 Linux 提供的一个负载均衡模块,支持多种负载…

AI风向标|算力与通信的完美融合,SRM6690解锁端侧AI的智能密码

当前,5G技术已经成为推动数字经济和实体经济深度融合的关键驱动力,进入5G发展的下半场,5G与AI的融合正推动诸多行业的数字化转型和创新发展,终端侧AI和端云混合式AI将广泛应用于各类消费终端和各行各业。 在推动5G和AI与各行业场…