【Python入门第八讲】不可变的列表 | 元组

server/2024/11/24 17:02:15/

元组

列表非常适合用于存储在程序运行期间可能变化的数据集。列表是可以修改的,这对处理网站的用户列表或游戏中的角色列表至关重要。然而,有时候你需要创建一系列不可修改的元素,元组可以满足这种需求。 Python将不能修改的值称为不可变的,而不可变的列表被称为元组。

请在此添加图片描述

定义元组

_元组(Tuple)_是 Python 中的一种不可改变的数据类型,类似于列表,但元组中的元素不能被修改一旦创建。元组使用圆括号 () 定义,而不是方括号。定义元组后,就可以使用索引来访问其元素,就像访问列表元素一样。

例如,如果有一个大小不应改变的矩形,可将其长度和宽度存储在一个元组中,从而确保它们是不能修改的:

下面是一个关于矩形大小的元组的示例:

python"># 定义矩形大小的元组
rectangle_size = (10, 5)# 访问元组的元素
length = rectangle_size[0]
width = rectangle_size[1]print(f"The rectangle has a length of {length} and a width of {width}.")
# 输出: The rectangle has a length of 10 and a width of 5.

在这个例子中,rectangle_size 是一个包含两个元素的元组,分别表示矩形的长度和宽度。通过索引访问元组的元素,可以获取矩形的长度和宽度。元组一旦创建,其元素就不可修改。

元组示例

python"># 创建一个元组
my_tuple = (1, 2, 3, 'hello', 3.14)# 访问元组元素
print(my_tuple[0])  # 输出: 1
print(my_tuple[3])  # 输出: 'hello'# 获取元组长度
length = len(my_tuple)
print(length)  # 输出: 5

元组的不可修改性使其适用于存储在整个程序生命周期内不应更改的数据集合。如果需要一个保持不变的有序集合,可以使用元组。

特性

  1. 不可变性(Immutable): 元组一旦创建,其元素不可被修改、添加或删除。这意味着你不能通过索引或方法改变元组的内容。
  2. 有序性: 元组是有序的,即元素的顺序是有意义的,并且可以通过索引访问。
  3. 可以包含不同类型的元素: 一个元组中可以包含不同类型的元素,例如整数、字符串、浮点数等。
  4. 支持嵌套: 元组中的元素可以是其他元组,实现嵌套结构。
  5. 使用圆括号定义: 元组通过圆括号 () 定义,元素之间使用逗号 , 分隔。

元组常用于表示一组相关的值,例如坐标、日期、配置项等。其不可变性使其适用于那些不应该被修改的场景,同时也提供了一些性能上的优势。

基本操作符

连接: 使用 + 号可以连接两个元组,生成一个新的元组。

python">tuple1 = (1, 2, 3)
tuple2 = ('a', 'b', 'c')
result = tuple1 + tuple2
print(result)  # 输出: (1, 2, 3, 'a', 'b', 'c')

重复: 使用 * 号可以重复一个元组多次。

python">tuple1 = (1, 2, 3)
result = tuple1 * 3
print(result)  # 输出: (1, 2, 3, 1, 2, 3, 1, 2, 3)

成员关系: 使用 innot in 判断元素是否在元组中。

python">tuple1 = (1, 2, 3)
print(2 in tuple1)   # 输出: True
print('a' not in tuple1)  # 输出: True

元组切片:[index:index]遵循左闭右开原则。

元组支持切片操作,这使得你可以获取元组中的一部分元素。切片的语法为 start:stop:step,其中:

  • start 表示切片的起始索引(包含该位置的元素)。
  • stop 表示切片的结束索引(不包含该位置的元素)。
  • step 表示切片的步长(每隔多少个元素取一个)。

例子:

python">my_tuple = (0, 1, 2, 3, 4, 5, 6, 7, 8, 9)# 获取索引 2 到 5 的切片
slice1 = my_tuple[2:6]
print(slice1)  # 输出: (2, 3, 4, 5)# 获取索引 0 到 9 的切片,步长为 2
slice2 = my_tuple[0:10:2]
print(slice2)  # 输出: (0, 2, 4, 6, 8)# 获取整个元组的切片,步长为 3
slice3 = my_tuple[::3]
print(slice3)  # 输出: (0, 3, 6, 9)# 逆序获取元组的切片
reverse_slice = my_tuple[::-1]
print(reverse_slice)  # 输出: (9, 8, 7, 6, 5, 4, 3, 2, 1, 0)

常用的方法

count方法:

返回指定值在元组中出现的次数。

python">my_tuple = (1, 2, 3, 1, 4, 1, 5)
count_ones = my_tuple.count(1)
print(count_ones)  # 输出: 3

index方法:

返回指定值在元组中第一次出现的索引。

python">my_tuple = (1, 2, 3, 1, 4, 1, 5)
index_4 = my_tuple.index(4)
print(index_4)  # 输出: 4

这两个方法允许你在元组中查找特定值的信息。由于元组的不可变性,其他修改元组内容的方法相对较少。

魔法方法

在Python中,魔法方法是一种特殊的方法,其名称以双下划线开头和结尾,如__method__。这些方法在特定的情况下由解释器自动调用,可以为类提供一些特殊行为。下面是tuple类中一些常用的魔法方法:

**__add__**方法:

  • 实现元组的合并,使用 + 运算符。
python">tuple1 = (1, 2, 3)
tuple2 = (4, 5, 6)
result = tuple1.__add__(tuple2)
print(result)  # 输出: (1, 2, 3, 4, 5, 6)

**__mul__**方法:

  • 实现元组的重复,使用 * 运算符。
python">tuple1 = (1, 2, 3)
result = tuple1.__mul__(3)
print(result)  # 输出: (1, 2, 3, 1, 2, 3, 1, 2, 3)

**__len__**方法:

  • 返回元组中元素的个数,使用 len() 函数。
python">tuple1 = (1, 2, 3, 4, 5)
length = tuple1.__len__()
print(length)  # 输出: 5

**__getitem__**方法:

  • 获取指定索引位置的元素,使用 [] 运算符。
python">tuple1 = (1, 2, 3, 4, 5)
element = tuple1.__getitem__(2)
print(element)  # 输出: 3

这些魔法方法提供了元组类的一些基本操作的实现方式。在实际编程中,通常直接使用运算符和内置函数而不是调用这些魔法方法。

常用函数和操作

len(tuple)****:

  • 返回元组中元素的个数。
python">my_tuple = (1, 2, 3, 4, 5)
length = len(my_tuple)
print(length)  # 输出: 5

max(tuple)****:

  • 返回元组中的最大值。
python">my_tuple = (1, 2, 3, 4, 5)
maximum = max(my_tuple)
print(maximum)  # 输出: 5

min(tuple)****:

  • 返回元组中的最小值。
python">my_tuple = (1, 2, 3, 4, 5)
minimum = min(my_tuple)
print(minimum)  # 输出: 1

type(tuple)****:

  • 返回元组的类型。
python">emy_tuple = (1, 2, 3, 4, 5)
tuple_type = type(my_tuple)
print(tuple_type)  # 输出: <class 'tuple'>

tuple(iterable)****:

  • 将可迭代对象转换为元组。
python">my_list = [1, 2, 3, 4, 5]
converted_tuple = tuple(my_list)
print(converted_tuple)  # 输出: (1, 2, 3, 4, 5)

上面这些函数提供了对元组进行常见操作的便捷方式。


http://www.ppmy.cn/server/144589.html

相关文章

在win10环境部署opengauss数据库(包含各种可能遇到的问题解决)

适用于windows环境下通过docker desktop实现opengauss部署&#xff0c;请审题。 文章目录 前言一、部署适合deskdocker的环境二、安装opengauss数据库1.配置docker镜像源2.拉取镜像源 总结 前言 注意事项&#xff1a;后面docker拉取镜像源最好电脑有科学上网工具如果没有科学上…

php:nginx如何配置WebSocket代理?

在nginx配置中加入以下配置即可&#xff1a; server {listen 80;server_name test.com;# 配置 WebSocket 代理location /ws {proxy_pass http://127.0.0.1:8083;proxy_http_version 1.1;proxy_set_header Upgrade $http_upgrade;proxy_set_header Connection "upgrade&qu…

软硬件项目运维方案书,系统运维资料,运维实施方案,运维服务方案(Word原件)

1 系统的服务内容 1.1 服务目标 1.2 信息资产统计服务 1.3 网络、安全系统运维服务 1.4 主机、存储系统运维服务 1.5 数据库系统运维服务 1.6 中间件运维服务 2 运维服务流程 3 服务管理制度规范 3.1 服务时间 3.2 行为规范 3.3 现场服务支持规范 3.4 问题记录规范 4 应急服务响…

C++初阶——类和对象(下)

目录 1、再探构造函数——初始化列表 2、类型转换 3、static成员 4、友元 5、内部类 6、匿名对象 7、对象拷贝时编译器的优化(了解) 1、再探构造函数——初始化列表 1. 构造函数初始化除了使用函数体内赋值&#xff0c;还有一种方式——初始化列表&#xff0c; 初始化列…

element-plus教程:Layout 布局

一、基础用法 1. 引入Layout布局组件 首先&#xff0c;确保你已经在项目中安装了Element Plus&#xff0c;并在main.js或main.ts中引入了Element Plus及其样式。 2. 使用<el-row>和<el-col>组件 在Element Plus中&#xff0c;Layout布局主要通过<el-row>…

实验四:构建园区网(OSPF 动态路由)

目录 一、实验简介 二、实验目的 三、实验需求 四、实验拓扑 五、实验步骤 1、在 eNSP 中部署网络 2、设计全网 IP 地址 3、配置二层交换机 4、配置路由交换机并测试通信 5、配置路由接口地址 6、配置 OSPF 动态路由&#xff0c;实现全网互通 一、实验简介 使用路由…

成功案例 | Fortinet助力宾堡打造数字化安全“美味王国”

在全球数字化转型的大背景下&#xff0c;烘焙食品行业也迎来了前所未有的变革。2024年全球烘焙食品市场规模预计将达到2337.7亿美元1&#xff0c;而数字化转型则成为推动这一市场增长的关键因素之一。 作为全球首屈一指的烘焙食品生产企业&#xff0c;宾堡集团&#xff08;Gru…

基于YOLOv8深度学习的独居老人情感状态监护系统(PyQt5界面+数据集+训练代码)

本研究提出了一种创新的独居老人情感状态监护系统&#xff0c;基于YOLOV8深度学习模型&#xff0c;旨在通过对老年人面部表情的实时监测与分析&#xff0c;来精准识别其情感变化&#xff0c;从而提高独居老人的生活质量&#xff0c;确保其心理健康。本系统通过整合先进的YOLOV8…