超详解——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.rhkb.cn/news/348321.html

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

相关文章

如何保证数据库和缓存的一致性

背景:为了提高查询效率,一般会用redis作为缓存。客户端查询数据时,如果能直接命中缓存,就不用再去查数据库,从而减轻数据库的压力,而且redis是基于内存的数据库,读取速度比数据库要快很多。 更新…

《web应用技术》第十一次作业

1、验证过滤器进行权限验证的原理。 代码展示: Slf4j WebFilter(urlPatterns "/*") public class LoginCheckFilter implements Filter { Override public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) thro…

计算机网络 —— 数据链路层(无线局域网)

计算机网络 —— 数据链路层(无线局域网) 什么是无线局域网IEEE 802.11主要标准及其特点: 802.11的MAC帧样式 我们来看看无线局域网: 什么是无线局域网 无线局域网(Wireless Local Area Network,简称WLAN…

平板消解加热台-温度均匀,防腐蚀-实验室化学分析

DBF系列防腐电热板 是精致路合金加热板块表面经进口高纯实验级PFATeflon氟塑料防腐不粘处理,专为实验室设计的电加热产品,是样品前处理中,加热、消解、煮沸、蒸酸、赶酸等处理的得力助手。可以满足物理、化学、生物、环保、制药、食品、饮品…

【个人博客搭建】(23)购买服务器、域名、备案

1、服务器主要是为了有一个公网的IP地址,方便我们可以通过网络随时访问 2、域名是对IP地址的一个替代。简单说IP地址可能不方便记忆,但是自己配置的域名会简单些,另外暴露IP地址也不安全。(虽然也能通过域名找到IP) 3、备案。这是政策。简单所…

PBox iOS端的应用隐藏、图片视频加密软件

哈喽,大家下午好!相信大家的手机中一定存在很多的私密内容,比如软件、照片、视频或者文档文件,很多都是不方便让外人看到的,此时就需要一款隐藏工具,市面上这类软件大部分都是收费的,应大家的需…

DETR实现目标检测(一)-训练自己的数据集

1、DETR架构 DETR(Detection Transformer)是一种新型的目标检测模型,由Facebook AI Research (FAIR) 在2020年提出。DETR的核心思想是将目标检测任务视为一个直接的集合预测问题,而不是传统的两步或多步预测问题。这种方法的创新…

升级和维护老旧LabVIEW程序

在升级老旧LabVIEW程序至64位环境时,需要解决兼容性、性能和稳定性等问题。本文从软件升级、硬件兼容性、程序优化、故障修复等多个角度详细分析。具体包括64位迁移注意事项、修复页面跳转崩溃、解决关闭程序后残留进程的问题,确保程序在新环境中的平稳运…

RainBond 制作应用并上架【以ElasticSearch为例】

文章目录 安装 ElasticSearch 集群第 1 步:添加组件第 2 步:查看组件第 3 步:访问组件制作 ElasticSearch 组件准备工作ElasticSearch 集群原理尝试 Helm 安装 ES 集群RainBond 制作 ES 思路源代码Dockerfiledocker-entrypoint.shelasticsearch.yml制作组件第 1 步:添加组件…

服务架构的设计原则

墨菲定律与康威定律 在系统设计的时候,可以依据于墨菲定律 任何事情都没有表面上看起来那么简单所有的事情都会比你预计的时间长可能出错的事总会出错担心的某一个事情的发送,那么它就更有可能发生 在系统划分的时候,可以依据康威定律 系…

python3的基本语法说明一

一. 简介 本文开始学习 python3 的基本语法。 二. python3的基本语法 1. 编码 默认情况下,Python 3 源码文件以 UTF-8 编码,所有字符串都是 unicode 字符串。 当然你也可以为源码文件指定不同的编码: # -*- coding: cp-1252 -*- 上述…

录音转文字软件:一键让工作学习更高效

在职场这个大舞台上,每一场会议都是关键的演出,而会议记录就是这场演出的剧本。但剧本要整理得好,才能让演出更精彩,不是吗? 把那些长串的会议音频变成清晰的文字记录,听起来就像变魔术一样难。但不用担心…

MariaDB数据导入与导出操作演示

文章目录 整个数据库导出导入先删除库然后再导入 参考这里: MariaDB数据库导出导入. 整个数据库 该部分演示:导出数据库,然后重建数据库,并导入数据的整个过程。 导出 Win R ,打开运行输入cmd并回车,然…

Unity与Js通信交互

目录 1.Js给Unity传递消息 2.Unity给Js传递消息 简介: Unity 与 JavaScript 通信交互是指在 Unity 项目中实现与 JavaScript 代码进行数据交换和功能调用的过程。 在 Unity 中,可以通过特定的接口和技术来与外部的 JavaScript 环境进行连接。这使得 Unity 能够利…

【git使用四】git分支理解与操作(详解)

目录 (1)理解git分支 主分支(主线) 功能分支 主线和分支关系 将分支合并到主分支 快速合并 非快速合并 git代码管理流程 (2)理解git提交对象 提交对象与commitID Git如何保存数据 示例讲解 &a…

探索乡村振兴新模式:发挥科技创新在乡村振兴中的引领作用,构建智慧农业体系,助力美丽乡村建设

随着科技的不断进步,乡村振兴工作正迎来前所未有的发展机遇。科技创新作为推动社会发展的重要力量,在乡村振兴中发挥着越来越重要的引领作用。本文旨在探讨如何发挥科技创新在乡村振兴中的引领作用,通过构建智慧农业体系,助力美丽…

六轴机械臂电控介绍

六轴机械臂通常是10kg负载,常用的有埃夫特,库卡,发那科等,其组成部分及用法如下。 本体部分,由底座和六个依次连接的连杆组成,每个连杆由一个电机带动,从底座到末端的轴依次是,轴一带…

超越 Transformer开启高效开放语言模型的新篇章

在人工智能快速发展的今天,对于高效且性能卓越的语言模型的追求,促使谷歌DeepMind团队开发出了RecurrentGemma这一突破性模型。这款新型模型在论文《RecurrentGemma:超越Transformers的高效开放语言模型》中得到了详细介绍,它通过…

SFTP共享配置

SFTP一般指SSH文件传输协议,在计算机领域,SSH文件传输协议(英语:SSH File Transfer Protocol,也称Secret File Transfer Protocol,中文:安全文件传送协议,英文:Secure FT…

HTTP3版本和实现验证

HTTP3协议基于Google的 QUIC 协议,由互联网工程任务组(IETF)来制定。目录还是草案,已经进行到第33版。 HTTP3 是基于 QUIC 协议的 http。传输层是UDPQUIC,应用层仍是HTTP,即request/respose, request里也仍…