python基础Day8

在 Python 中,元组(tuple)和集合(set)是两种常用的数据容器,它们各具特色,适用于不同的场景。本文将详细介绍这两种数据结构的特性、创建方式、基本操作及实际应用示例。

一、元组(tuple):不可变的有序容器

元组是用于存储多个数据的容器,底层采用线性表结构,具有有序、可重复的特点。其核心特性是不可变性,这使得它在性能上优于列表。

1. 元组的核心特性

  • 不可变性:元组一旦创建,长度不可改变,且存储的数据的地址不可修改(即不能替换元素)。
  • 高效性:由于不可变的特性,元组在 Python 中的性能比列表更强。
  • 灵活性:虽然元组本身不可变,但允许存储可变数据类型(如列表),不过不推荐这样做(可能导致逻辑混乱)。
  • 标记符:使用小括号 () 定义,且当元组中只有一个元素时,必须在元素后加逗号(如 (1,)),否则会被视为普通数据类型。

2. 元组的创建方式

  • 字面量定义:直接用小括号包裹元素,若元素明确,括号可省略(如 1, 2, 3 等价于 (1, 2, 3))。
  • tuple 工厂函数:将可迭代对象(如列表、字符串)转换为元组,例如 tuple([1, 2, 3]) 会生成 (1, 2, 3)

3. 元组支持的运算

  • 算术运算+(拼接)和 *(重复),例如 (1, 2) + (3, 4) = (1, 2, 3, 4)(1,) * 3 = (1, 1, 1)
  • 关系运算:支持比较大小(按元素顺序逐个比较),例如 (1, 3) > (1, 2) 结果为 True
  • 成员运算in(判断元素是否存在)和 not in(判断元素是否不存在)。

4. 元组生成推导式

元组的生成推导式语法与列表相同,但返回的是生成器(一种特殊的迭代器),而非直接生成元组。例如:

python

运行

gen = (x for x in range(5))  # 生成器对象
tuple_gen = tuple(gen)  # 转换为元组:(0, 1, 2, 3, 4)

二、集合(set):无序去重的哈希容器

集合是用于存储多个数据的容器,底层采用哈希表(散列表) 结构,通过开放寻址法解决哈希冲突。其核心特性是无序、不可重复(自动去重)。

1. 集合的核心特性

  • 无序性:集合中的元素没有固定顺序,无法通过索引访问。
  • 去重性:集合会自动去除重复元素,适合需要去重的场景。
  • 不可存储可变类型:由于集合依赖哈希算法,而可变数据类型(如列表、字典)无法进行哈希运算,因此不能存入集合。
  • 底层结构:基于哈希表,通过哈希算法计算元素存储位置,查询效率高。

2. 集合的创建方式

  • 字面量定义:使用大括号 {} 包裹元素,但不能用于创建空集合(空 {} 表示字典)。例如 {1, 2, 3}
  • set 工厂函数:将可迭代对象转换为集合,例如 set([1, 2, 3]) 或 set(range(5))
  • 生成推导式:语法与列表推导式一致,例如 {x for x in range(5)}

3. 集合的基本操作

(1)添加元素
  • add(x):向集合中添加元素 x,若 x 已存在则不操作。
(2)删除元素
  • remove(x):根据值删除元素,若 x 不存在则抛出 KeyError
  • discard(x):根据值删除元素,若 x 不存在则不报错(推荐使用)。
  • pop():随机删除集合中的一个元素(因集合无序,无法预测删除哪个元素)。
  • clear():清空集合中的所有元素。
(3)集合间的运算

集合支持多种数学运算,如下表所示:

运算类型方法运算符说明
并集union(set)``合并两个集合的所有元素
交集intersection(set)&保留两个集合的共同元素
差集difference(set)-保留当前集合有而另一个集合没有的元素
补集symmetric_difference(set)^保留两个集合中不重复的元素

此外,还有带 _update 后缀的方法(如 update()intersection_update()),这些方法会直接修改当前集合,而非返回新集合。

(4)子集与超集判断
  • issubset(set):判断当前集合是否是另一个集合的子集(包含于另一个集合)。
  • issuperset(set):判断当前集合是否是另一个集合的超集(包含另一个集合)。
  • isdisjoint(set):判断两个集合是否无交集(没有共同元素)。
(5)关系运算符
  • == / !=:判断两个集合的内容是否相等 / 不相等。
  • > / >=:判断当前集合是否是另一个集合的超集(> 表示真超集,即不相等的超集)。
  • < / <=:判断当前集合是否是另一个集合的子集(< 表示真子集)。

三、实例:集合运算的实际应用

下面通过一个实例演示集合的运算。假设我们有两个集合 set1 和 set2,分别包含 0-9 和 5-15 的整数,我们来计算它们的并集:

python

运行

# 创建两个集合
set1 = set(range(10))  # {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}
set2 = set(range(5, 16))  # {5, 6, ..., 15}

# 计算并集(使用运算符 |)
set3 = set1 | set2

print(set3)
# 输出:{0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}

上述代码中,set1 | set2 等价于 set1.union(set2),结果是包含 0-15 所有整数的集合(自动去重,5-9 在两个集合中重复,只保留一次)。

四、总结

  • 元组适合存储不可变的有序数据,如坐标 (x, y)、日期 (year, month, day) 等,利用其不可变性保证数据安全。
  • 集合适合需要去重、高效查询或进行数学运算(如交集、并集)的场景,如数据去重、关系判断等。

掌握元组和集合的特性与操作,能帮助我们在实际开发中选择更合适的数据结构,提高代码效率和可读性。

内容概要:本文针对有源中点箝位(ANPC)三电平并网逆变器在谐波抑制、电网不平衡工况适应性及动态响应性能方面的不足,提出了一种融合双极性倍频脉宽调制(DPWMA)、正负序分离锁相技术与电网电压前馈控制的一体化高性能并网控制策略。通过对ANPC拓扑结构的优势进行分析,结合DPWMA调制提升输出电能质量,利用正负序分离锁相实现电网异常工况下的精确同步,并引入电网电压前馈控制以增强系统抗扰能和动态响应速度。仿真结果表明,该复合控制策略能显著降低并网电流谐波含量,提高锁相精度和系统稳定性,适用于电压不平衡、畸变及动态扰动等复杂电网环境下的大功率并网应用。; 适合人群:具备电电子与电系统基础知识,从事新能源并网、逆变器控制、微电网技术等相关领域的研究生、科研人员及工程技术人员。; 使用场景及目标:①提升大功率并网逆变器在非理想电网条件下的运行性能;②优化逆变器控制策略以实现高质量电能输出和快速动态响应;③为高性能并网系统的设计与仿真提供技术参考和实现方案。; 阅读建议:建议结合Simulink仿真模型进行实践验证,重点关注DPWMA调制的实现机制、正负序分离锁相环的设计方法以及前馈控制环节的参数整定过程,深入理解各模块之间的协同工作机制。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值