超详解——Python 元组详解——小白篇

目录

1. 元组简介

创建元组

2. 元组常用操作

访问元组元素

切片操作

合并和重复

成员操作符

内置函数

解包元组

元组方法

3. 默认集合类型

作为字典的键

作为函数参数

作为函数的返回值

存储多种类型的元素

4.元组的优缺点

优点

缺点

5.元组的使用场景

数据存储

配置项

函数返回值

多线程环境

6.与其他数据结构的比较

与列表的比较

与集合的比较

7.高级用法

嵌套元组

元组作为数据表

多变量交换

总结


元组(Tuple)是Python中的一种内置数据类型,用于存储多个有序的元素。与列表不同,元组是不可变的,这意味着一旦创建,元组中的元素就不能修改。

1. 元组简介

元组是Python中的一种序列类型,使用圆括号 () 表示。元组可以包含任意类型的元素,包括数字、字符串、列表、甚至其他元组。元组的不可变性使得它们在某些场景下非常有用,例如作为函数的返回值,或者作为字典的键。

创建元组

元组可以通过圆括号 () 创建,元素之间用逗号 , 分隔。如果元组中只有一个元素,需要在元素后加一个逗号 ,,以避免与普通括号表达式混淆。

示例:

tup1 = (1, 2, 3)
tup2 = ("Python", 3.7, [1, 2, 3])
tup3 = (1,)  # 单元素元组
tup4 = ()  # 空元组print(tup1)  # 输出:(1, 2, 3)
print(tup2)  # 输出:("Python", 3.7, [1, 2, 3])
print(tup3)  # 输出:(1,)
print(tup4)  # 输出:()

元组也可以通过内置函数 tuple() 创建,将可迭代对象(如列表、字符串)转换为元组。

示例:

lst = [1, 2, 3]
tup = tuple(lst)
print(tup)  # 输出:(1, 2, 3)s = "Python"
tup2 = tuple(s)
print(tup2)  # 输出:('P', 'y', 't', 'h', 'o', 'n')

2. 元组常用操作

虽然元组是不可变的,但Python提供了一些操作符和方法,用于查询和处理元组中的元素。

访问元组元素

元组中的元素可以通过索引访问,索引从0开始。负索引从-1开始,表示从末尾向前数。

示例:

tup = (1, 2, 3, 4, 5)
print(tup[0])  # 输出:1
print(tup[-1]) # 输出:5

切片操作

元组支持切片操作,可以提取子元组。切片的语法为 元组[开始:结束:步长],其中 开始结束 是索引,步长 表示元素间的间隔。

示例:

tup = (1, 2, 3, 4, 5)
print(tup[1:4])  # 输出:(2, 3, 4)
print(tup[:3])   # 输出:(1, 2, 3)
print(tup[::2])  # 输出:(1, 3, 5)

合并和重复

元组可以使用 + 操作符合并,使用 * 操作符重复。

示例:

tup1 = (1, 2, 3)
tup2 = (4, 5, 6)
tup3 = tup1 + tup2
print(tup3)  # 输出:(1, 2, 3, 4, 5, 6)tup4 = tup1 * 3
print(tup4)  # 输出:(1, 2, 3, 1, 2, 3, 1, 2, 3)

成员操作符

可以使用 innot in 操作符检查元素是否存在于元组中。

示例:

tup = (1, 2, 3, 4, 5)
print(3 in tup)     # 输出:True
print(6 not in tup) # 输出:True

内置函数

以下是一些常用的元组内置函数:

  • len(tup):返回元组的长度。
  • max(tup):返回元组中的最大值。
  • min(tup):返回元组中的最小值。
  • sum(tup):返回元组中所有元素的和(适用于数字元组)。
  • sorted(tup):返回元组的排序副本(结果为列表)。
  • tuple(iterable):将可迭代对象转换为元组。

示例:

tup = (1, 2, 3, 4, 5)
print(len(tup))     # 输出:5
print(max(tup))     # 输出:5
print(min(tup))     # 输出:1
print(sum(tup))     # 输出:15
print(sorted(tup))  # 输出:[1, 2, 3, 4, 5]

解包元组

元组解包允许将元组中的元素赋值给多个变量。

示例:

tup = (1, 2, 3)
a, b, c = tup
print(a, b, c)  # 输出:1 2 3# 使用 * 运算符解包剩余元素
tup = (1, 2, 3, 4, 5)
a, *b, c = tup
print(a)  # 输出:1
print(b)  # 输出:[2, 3, 4]
print(c)  # 输出:5

元组方法

元组提供了两个内置方法:

  • tup.count(x):返回元素 x 在元组中出现的次数。
  • tup.index(x):返回元素 x 在元组中第一次出现的索引。

示例:

tup = (1, 2, 3, 2, 4, 2)
print(tup.count(2))  # 输出:3
print(tup.index(3))  # 输出:2

3. 默认集合类型

在Python中,元组被广泛用作默认集合类型,因为它们是不可变的。这种不可变性使得元组在某些场景下非常有用,例如:

作为字典的键

由于元组是不可变的,因此可以用作字典的键。而列表是可变的,不能用作字典的键。

示例:

d = {(1, 2): "a", (3, 4): "b"}
print(d[(1, 2)])  # 输出:"a"
print(d[(3, 4)])  # 输出:"b"

作为函数参数

元组常用于传递函数的多个参数。函数可以接受元组作为参数,并解包元组中的元素。

示例:

def func(a, b, c):print(a, b, c)tup = (1, 2, 3)
func(*tup)  # 输出:1 2 3

作为函数的返回值

元组常用于函数返回多个值。函数可以返回一个元组,并在调用时解包返回的元组。

示例:

def func():return 1, 2, 3a, b, c = func()
print(a, b, c)  # 输出:1 2 3

存储多种类型的元素

元组可以存储不同类型的元素,常用于固定结构的数据。例如,一个包含名称、年龄和地址的元组。

示例:

person = ("John", 25, "1234 Elm St")
name, age, address = person
print(f"Name: {name}, Age: {age}, Address: {address}")
# 输出:Name: John, Age: 25, Address: 1234 Elm St

4.元组的优缺点

优点

  1. 不可变性:元组的不可变性使得它们在多线程环境中是安全的,可以避免数据竞争。
    tup = (1, 2, 3)
    # 无法修改元组中的元素
    # tup[0] = 10  # 这行代码会引发错误
    
  2. 性能:元组的创建和访问速度比列表快,因为它们是不可变的,不需要额外的内存开销。
    import timeitt1 = timeit.timeit("(1, 2, 3)", number=1000000)
    t2 = timeit.timeit("[1, 2, 3]", number=1000000)print(f"元组创建时间: {t1}")
    print(f"列表创建时间: {t2}")
    
  3. 哈希特性:元组可以作为字典的键,因为它们是不可变的,这在某些数据结构中非常有用。
    d = { (1, 2): "a", (3, 4): "b" }
    print(d[(1, 2)])  # 输出:"a"
    

缺点

  1. 不可变性:虽然不可变性是一个优点,但在需要修改元素的情况下,它可能成为一个限制。
    tup = (1, 2, 3)
    # 尝试修改元组中的元素会引发错误
    # tup[0] = 10  # 这行代码会引发错误
    
  2. 功能限制:与列表相比,元组不支持许多列表的方法,例如 append()remove() 等,这在某些操作中可能不方便。
    lst = [1, 2, 3]
    lst.append(4)
    print(lst)  # 输出:[1, 2, 3, 4]tup = (1, 2, 3)
    # tup.append(4)  # 这行代码会引发错误
    

5.元组的使用场景

数据存储

元组常用于存储不同类型的数据,例如数据库记录。一条记录的不同字段可以用元组存储。

record = ("John Doe", 30, "Engineer")
name, age, profession = record
print(f"Name: {name}, Age: {age}, Profession: {profession}")
# 输出:Name: John Doe, Age: 30, Profession: Engineer

配置项

在某些情况下,配置项可以用元组存储,因为它们是不可变的,不会被意外修改。

config = (800, 600)
# config[0] = 1024  # 这行代码会引发错误
print(config)  # 输出:(800, 600)

函数返回值

在需要返回多个值的函数中,元组是一个常用的选择。

def get_user_info():return "Alice", 28, "Developer"name, age, job = get_user_info()
print(f"Name: {name}, Age: {age}, Job: {job}")
# 输出:Name: Alice, Age: 28, Job: Developer

多线程环境

在多线程环境中,使用元组可以避免数据竞争和修改问题。

import threadingdef worker(data):print(data)data = (1, 2, 3)
threads = [threading.Thread(target=worker, args=(data,)) for _ in range(5)]for t in threads:t.start()for t in threads:t.join()

6.与其他数据结构的比较

与列表的比较

  • 不可变性:元组是不可变的,而列表是可变的。
    tup = (1, 2, 3)
    # tup[0] = 10  # 这行代码会引发错误lst = [1, 2, 3]
    lst[0] = 10
    print(lst)  # 输出:[10, 2, 3]
    
  • 性能:元组的性能通常比列表好,因为它们不需要额外的内存开销。
    import timeitt1 = timeit.timeit("(1, 2, 3)", number=1000000)
    t2 = timeit.timeit("[1, 2, 3]", number=1000000)print(f"元组创建时间: {t1}")
    print(f"列表创建时间: {t2}")
    
  • 功能:列表有更多的方法和操作符,例如 append()remove() 等。
    lst = [1, 2, 3]
    lst.append(4)
    print(lst)  # 输出:[1, 2, 3, 4]tup = (1, 2, 3)
    # tup.append(4)  # 这行代码会引发错误
    

与集合的比较

  • 顺序:元组是有序的,而集合是无序的。
    tup = (1, 2, 3)
    print(tup)  # 输出:(1, 2, 3)s = {3, 1, 2}
    print(s)  # 输出:{1, 2, 3} 或 {3, 1, 2} 等(集合是无序的)
    
  • 不可变性:元组是不可变的,而集合是可变的。
    tup = (1, 2, 3)
    # tup[0] = 10  # 这行代码会引发错误s = {1, 2, 3}
    s.add(4)
    print(s)  # 输出:{1, 2, 3, 4}
    
  • 重复元素:元组允许重复元素,而集合不允许重复元素。
    tup = (1, 2, 2, 3)
    print(tup)  # 输出:(1, 2, 2, 3)s = {1, 2, 2, 3}
    print(s)  # 输出:{1, 2, 3}
    

7.高级用法


嵌套元组

元组可以包含其他元组作为元素,这使得它们可以用于表示复杂的数据结构。

nested_tup = (1, (2, 3), (4, (5, 6)))
print(nested_tup[1])  # 输出:(2, 3)
print(nested_tup[2][1])  # 输出:(5, 6)

元组作为数据表

在处理数据库或表格数据时,元组常用于表示行数据。

rows = [(1, "John", "Doe"),(2, "Jane", "Smith"),(3, "Emily", "Jones")
]for row in rows:print(row)
# 输出:
# (1, "John", "Doe")
# (2, "Jane", "Smith")
# (3, "Emily", "Jones")

多变量交换

元组可以用于交换多个变量的值,而不需要临时变量。

a, b = 1, 2
a, b = b, a
print(a, b)  # 输出:2 1

总结

元组是Python中重要的数据结构,因其不可变性而被广泛应用。通过本文的详细讲解,相信读者对元组的常用操作和其作为默认集合类型的用法有了深入的理解。元组的不可变性使得它们在某些场景下非常有用,如作为字典的键、函数参数和返回值等。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/26273.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何降低pcdn的延迟?

要降低P2P CDN的延迟,可以采取以下操作: 一.优化网络连接: 1、使用有线网络连接替代无线连接,因为有线连接通常提供更稳定的数据传输。 2、升级家庭或企业路由器,选择性能更好的路由器以提高网络传输速度…

6月11号作业

思维导图 #include <iostream> using namespace std; class Animal { private:string name; public:Animal(){}Animal(string name):name(name){//cout << "Animal&#xff1b;有参" << endl;}virtual void perform(){cout << "讲解员的…

【FineReport】帆软调用服务器的kettle作业

1、编写自定义函数并编译 package com.fr.function;import ch.ethz.ssh2.ChannelCondition; import ch.ethz.ssh2.Connection; import ch.ethz.ssh2.Session; import ch.ethz.ssh2.StreamGobbler; import com.fr.script.AbstractFunction;import java.io.BufferedReader; impo…

【web APIs】快速上手Day02

文章目录 Web APIs - 第2天事件事件监听案例一 :京东点击关闭顶部广告案例二&#xff1a;随机点名案例拓展知识-事件监听版本 双击事件 事件类型鼠标事件综合案例-轮播图完整版 焦点事件综合案例-小米搜索框案例 键盘事件文本事件 事件对象综合案例-按下回车发布评论 环境对象回…

算法day27

第一题 515. 在每个树行中找最大值 首先是遍历每层的节点&#xff0c;将每一层最大值的节点的值保留下来&#xff0c;最后将所有层的最大值的表返回&#xff1b;具体的遍历每层节点的过程如上一篇故事&#xff1b; 综上所述&#xff0c;代码如下&#xff1a; /*** Definition …

数据结构与算法题目集(中文) 6-3 求链表的表长

该代码使用循环遍历链表来计算链表的长度。代码首先定义了一个整数变量i用于计数&#xff0c;并初始化为0。然后进入一个while循环&#xff0c;条件为链表L非空。在循环中&#xff0c;通过L L->Next来遍历链表中的每一个节点&#xff0c;并将计数变量i递增。最终返回计数变…

2024海南省大数据教师培训-Hadoop集群部署

前言 本文将详细介绍Hadoop分布式计算框架的来源&#xff0c;架构和应用场景&#xff0c;并附上最详细的集群搭建教程&#xff0c;能更好的帮助各位老师和同学们迅速了解和部署Hadoop框架来进行生产力和学习方面的应用。 一、Hadoop介绍 Hadoop是一个开源的分布式计算框架&…

文献解读-农业系列-第七期|《高粱驯化的基因组足迹和多种最终用途的育种选择》

关键词&#xff1a;高粱基因分析&#xff1b;基因组变异检测&#xff1b;全基因组重测序&#xff1b; 文献简介 标题&#xff08;英文&#xff09;&#xff1a;Genomic footprints of sorghum domestication and breeding selection for multiple end uses标题&#xff08;中文…

【Linux系统化学习】传输层——TCP协议

目录 预备知识 全双工协议 协议缓冲区 TCP协议 TCP协议格式 六个标志位 两个问题 确认应答机制 流量控制 超时重传机制 连接管理机制 CLOSE_WAIT状态 TIME_WAIT状态 滑动窗口 拥塞控制 延迟应答 捎带应答 粘包问题 TCP的异常情况 TCP小结 TCP/UDP协议对比…

MAC认证

简介 MAC认证是一种基于接口和MAC地址对用户的网络访问权限进行控制的认证方法&#xff0c;它不需要用户安装任何客户端软件。设备在启动了MAC认证的接口上首次检测到用户的MAC地址以后&#xff0c;即启动对该用户的认证操作。认证过程中&#xff0c;不需要用户手动输入用户名…

成都跃享未来教育抖音小店深度解析靠谱与否

在如今网络购物日益繁荣的时代&#xff0c;抖音小店以其独特的平台优势和庞大的用户基础&#xff0c;吸引了越来越多的商家入驻。成都跃享未来教育咨询有限公司便是其中之一&#xff0c;它的抖音小店究竟靠不靠谱呢&#xff1f;今天&#xff0c;我们就来一起揭开这个谜底。 首…

刷题训练之分治归并

> 作者&#xff1a;დ旧言~ > 座右铭&#xff1a;松树千年终是朽&#xff0c;槿花一日自为荣。 > 目标&#xff1a;熟练掌握分治归并算法。 > 毒鸡汤&#xff1a;学习&#xff0c;学习&#xff0c;再学习 ! 学&#xff0c;然后知不足。 > 专栏选自&#xff1a;刷…

神经气体生长算法【GNG】

当德国计算神经学家 Bernd Fritzke 在其 1995 年的开创性论文中提出后来被称为神经气体生长&#xff08;GNG&#xff09;的算法时&#xff0c;机器学习还是一个相对较新的领域&#xff0c;并且受到实际神经科学的极大启发。 当时&#xff0c;神经科学正处于一个突破性的时代—…

MySQL表设计经验汇总篇

文章目录 1、命名规范2、选择合适的字段类型3、主键设计要合理4、选择合适的字段长度5、优先考虑逻辑删除&#xff0c;而不是物理删除6、每个表都需要添加通用字段7、一张表的字段不宜过多8、定义字段尽可能not null9、合理添加索引10、通过业务字段冗余来减少表关联11、避免使…

电子元器件批发的几种模式

电子元器件的批发模式多种多样&#xff0c;以下是几种常见的模式&#xff1a; 传统批发模式&#xff1a;传统的电子元器件批发模式是指厂商或代理商通过与制造商签订合同&#xff0c;大批量购买元器件&#xff0c;并将其以较低的价格批发给零售商或其他中小型企业。这种模式通常…

【ARM Cache 及 MMU 系列文章 6.4 -- Cache miss 统计详细介绍】

请阅读【ARM Cache 及 MMU/MPU 系列文章专栏导读】 及【嵌入式开发学习必备专栏】 文章目录 ARM Cache Miss 统计Cache 多层架构简介Cache 未命中的类型Cache 未命中统计Cache miss 统计代码实现Cache Miss 统计意义ARM Cache Miss 统计 在ARMv8/v9架构中,缓存未命中(Cache …

2. pytorch环境安装

概述 ​ 本文提供基于Anaconda环境Windows11操作系统的Pytorch深度学习环境的配置。深度学习环境分为GPU和CPU两大部分。使用GPU进行环境配置&#xff0c;需要保证电脑配有独立显卡&#xff0c;并且显卡驱动安装正常&#xff0c;详情见前文。 1. 创建新的虚拟环境用来配置Pyt…

DevExpress 控件和库

UI控件和组件 DevExpress WinForms包括以下Windows窗体库和控件&#xff1a; Grids and Editors Data Grid Tree List Vertical Grid Property Grid Gantt Control Data Editors and Simple Controls Office-inspired Ribbon, Bars and Menu Rich Text Editor Scheduler S…

什么是AIGC?AIGC是否会颠覆未来的内容生产模式?普通人如何利用好AI提高内容生产效率?

2024年是AI元年&#xff0c;正好我在AI公司里面工作&#xff0c;对AIGC有着几年的研究&#xff0c;接下来把我这对AIGC的学习经验毫无保留的给大家分享一下 AIGC 的简要介绍 在狭义上&#xff0c;AIGC是指利用AI自动生成内容的生产方式&#xff0c;比如自动写作、自动设计等。…

诊所管理系统有没有免费的?

随着消费市场的不断变化&#xff0c;消费型医疗领域逐渐受到重视&#xff0c;医疗机构面临激烈的行业竞争。为了提升诊所的经营管理效率和营销能力&#xff0c;选择一款合适的诊所管理系统变得尤为重要。然而&#xff0c;面对市场上众多的系统选择&#xff0c;如何找到适合自己…