【Python探索之旅】元组

元组的作用

遍历

 修改

元组运算符

索引和切片

加法运算符

 重复运算符

比较运算符

完结撒花 

前言

元组(tuple)是一种静态的(immutable)或者说是不可变(unchangeable)的数据结构,里面的元素按照一定的顺序排列。它是静态的,所以元组里的元素不能被修改。

元组用于给数据分组。元组中的每一个元素称之为“项”(item)。

元组中的值被包装在括号中,并用逗号分隔,空元组可以写成tuple=(),不过只有一项元素的元组必须使用逗号:tuple = (“Googlel”,)。

如果使用print()函数打印元组,会得到如下的输出,其中元组依然‘()’用括号包裹

Python 的元组与列表类似,不同之处在于元组的元素不能修改。

元组使用小括号 ( ),列表使用方括号 [ ]。

元组创建很简单,只需要在括号中添加元素,并使用逗号隔开即可。

 

元组的作用

 元组在Python中非常有用,特别是在需要保证数据不被更改的场景。例如,在函数中返回多个值时,使用元组可以确保这些值不会被函数外部意外修改。此外,元组也常用于有序的集合,其中元素的顺序很重要,或者当我们想要存储不可变的数据时,如函数的参数。

 例如:

# 创建一个空元组
empty_tuple = ()

# 创建一个包含多个元素的元组
my_tuple = (1, 2, 3, 'a', 'b', 'c')

# 创建一个单个元素的元组(注意逗号是必须的)
single_element_tuple = (42,)

# 元组的元素可以通过索引访问
print(my_tuple[0])  # 输出: 1
print(my_tuple[-1])  # 输出: 'c'

 可以看到,元组类似于列表,0索引开始,-1为最后一位元素。

遍历

顾名思义就将一个范围内的所以值全部输出一遍,比如遍历1-100,则是将1-100之间所有的数字遍历一遍,在Python元组,遍历这需要使用我们前面所学的for循环语句。

可以使用一个 for 循环来遍历元组

my_tuple = (1, 2, 3, 'a', 'b', 'c')

for element in my_tuple:
    print(element)

这里,我们使用 for 循环迭代了 my_tuple,每次迭代时,都会将元组中的下一个元素赋值给 element 变量,然后我们可以在循环体内对 element 进行相应的处理。 

1
2
3
a
b
c

 如果需要同时获取元素的索引,可以使用 enumerate 函数:

my_tuple = (1, 2, 3, 'a', 'b', 'c')

for index, element in enumerate(my_tuple):
    print(index, element)


#输出结果
0 1
1 2
2 3
3 a
4 b
5 c

这里,我们使用了 enumerate 函数,它会在迭代元组时同时返回元素的索引和元素本身,这样我们就能在迭代过程中获取到元素的索引。

 修改

 在Python中,元组(tuple)是不可变的,这意味着一旦创建,就不能直接修改元组中的元素。然而,我们可以通过一些技巧来“修改”元组,实际上是创建一个新的元组,或者将元组转换为列表进行修改后再转换回元组。

方法一:将元组转换为列表进行修改 

# 原始元组
original_tuple = (1, 2, 3, 4, 5)

# 将元组转换为列表
list_from_tuple = list(original_tuple)

# 修改列表中的元素
list_from_tuple[2] = 'modified'

# 将列表转换回元组
modified_tuple = tuple(list_from_tuple)

print(modified_tuple)  # 输出: (1, 2, 'modified', 4, 5)

方法二:创建一个新的元组,包含修改后的元素 

 

# 原始元组
original_tuple = (1, 2, 3, 4, 5)

# 创建一个新的元组,包含修改后的元素
modified_tuple = (original_tuple[0], original_tuple[1], 'modified', original_tuple[3], original_tuple[4])

print(modified_tuple)  # 输出: (1, 2, 'modified', 4, 5)

在这些方法中,我们都没有直接修改原始元组,而是创建了一个新的元组来反映修改。原始元组保持不变,这是元组不可变性的体现。如果你需要频繁地修改数据,可能应该考虑使用列表(list)而不是元组。

元组运算符

与字符串一样,元组之间可以使用 +、+=和 * 号进行运算。这就意味着他们可以组合和复制,运算后会生成一个新的元组。

Python 表达式结果描述
len((1, 2, 3))
3计算元素个数
>>> a = (1, 2, 3)
>>> b = (4, 5, 6)
>>> c = a+b
>>> c
(1, 2, 3, 4, 5, 6)
(1, 2, 3, 4, 5, 6)连接,c 就是一个新的元组,它包含了 a 和 b 中的所有元素。
>>> a = (1, 2, 3)
>>> b = (4, 5, 6)
>>> a += b
>>> a
(1, 2, 3, 4, 5, 6)
(1, 2, 3, 4, 5, 6)连接,a 就变成了一个新的元组,它包含了 a 和 b 中的所有元素。
('Hi!',) * 4
('Hi!', 'Hi!', 'Hi!', 'Hi!')复制
3 in (1, 2, 3)
True元素是否存在
for x in (1, 2, 3): 
    print (x, end=" ")
1 2 3迭代

索引和切片

元组可以使用索引和切片操作来访问元素,索引从0开始,切片遵循[start:stop:step]的格式。

tup = (1, 2, 3, 4, 5, 6)

# 访问第一个元素
print(tup[0])  # 输出: 1

# 访问最后一个元素
print(tup[-1])  # 输出: 6

# 访问第二个到第四个元素
print(tup[1:4])  # 输出: (2, 3, 4)

加法运算符

元组可以使用加法运算符(+)来连接两个元组,形成一个新的元组。

tup1 = (1, 2, 3)
tup2 = (4, 5, 6)

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

 重复运算符

元组可以使用重复运算符(*)来重复构造一个新的元组。

tup1 = (1, 2, 3)

print(tup1 * 3)  # 输出: (1, 2, 3, 1, 2, 3, 1, 2, 3)

比较运算符

元组可以使用比较运算符(<<=>>===!=)来进行比较。两个元组进行比较时,比较的是元组中的元素。

 

tup1 = (1, 2, 3)
tup2 = (1, 2, 3, 4)

print(tup1 < tup2)  # 输出: True
print(tup1 == tup2)  # 输出: False

需要注意的是,元组的运算符只能用于访问元素、连接元组、重复元组、判断成员资格和进行比较。对元组中的元素进行修改是不被允许的,因为元组是不可变的。

完结撒花 

讲完了,Python中的元组,接下来来看一道关于元组的算法题。

题目:

实现函数 group_consecutive_tuples,接收一个由整数组成的元组 nums 和一个整数 k 作为参数,返回一个由由长度为 k 的元组组成的列表,其中每个元组内的元素是连续的。如果 nums 中的元素数量少于 k,请返回一个空的列表。

示例:

group_consecutive_tuples((1, 2, 3, 4, 5, 6, 7), 3)  # 返回: [(1, 2, 3), (4, 5, 6), (7,)]
group_consecutive_tuples((1, 2, 3, 4, 5), 4)  # 返回: [(1, 2, 3, 4), (5,)]
group_consecutive_tuples((1, 2, 3, 4, 5, 6), 4)  # 返回: [(1, 2, 3, 4), (5, 6)]
group_consecutive_tuples((1, 2, 3), 4)  # 返回: [(1, 2, 3)]
group_consecutive_tuples((1, 2, 3, 4), 5)  # 返回: [(1, 2, 3, 4)]
group_consecutive_tuples((1, 2, 3, 4, 5, 6, 7, 8, 9), 5)  # 返回: [(1, 2, 3, 4, 5), (6, 7, 8, 9)]
group_consecutive_tuples((10, 9, 8, 7, 6, 5, 4, 3, 2, 1), 4)  # 返回: [(10, 9, 8, 7), (6, 5, 4, 3), (2, 1)]
group_consecutive_tuples((1, 2, 3, 4, 5, 6, 7, 8, 9), 10)  # 返回: [(1, 2, 3, 4, 5, 6, 7, 8, 9)]
group_consecutive_tuples((1, 2, 3, 4, 5, 6, 7, 8, 9), 11)  # 返回: []

解题思路:

  1. 初始化一个变量 start 并将其赋值为 nums[0]
  2. 初始化一个空的列表 result,用于存储最终的结果。
  3. 遍历元组 nums,将元素 num 与变量 start 进行比较:
    • 如果 num 与 start 连续,则继续遍历下一个元素。
    • 如果 num 与 start 不连续,则将 start 到 num 的连续元素(包括 start 和 num)组成一个长度为 k 的元组,并将其添加到列表 result 中。然后,将 start 更新为 num + 1
  4. 如果 nums 中的元素数量少于 k,则返回一个空的列表。
  5. 返回列表 result

实现代码 

 

def group_consecutive_tuples(nums, k):
    if len(nums) < k:
        return []

    start = nums[0]
    result = []

    for num in nums:
        if num == start:
            continue
        elif num == start + 1:
            start = num
        else:
            result.append(tuple(range(start, num)))
            start = num + 1

    result.append(tuple(range(start, nums[-1] + 1)))
    return result

---------------------------------------------------------------------------------------------------------------------------------

如果对博主感兴趣欢迎大家点赞+关注,添加博主联系方式一起探索哦!  

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Nginx企业级负载均衡:技术详解系列(1)

你好呀&#xff0c;我是赵兴晨&#xff0c;文科程序员。 最近&#xff0c;我注意到关于Nginx的文章总是能吸引到异常多的流量。这让我意识到&#xff0c;或许大家对这个话题有着浓厚的兴趣。既然如此&#xff0c;我决定将更多关于Nginx的深度内容与大家分享。 在接下来的时间…

[数据集][目标检测]肺结节检测数据集VOC+YOLO格式1186张1类别

数据集格式&#xff1a;Pascal VOC格式YOLO格式(不包含分割路径的txt文件&#xff0c;仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数)&#xff1a;1186 标注数量(xml文件个数)&#xff1a;1186 标注数量(txt文件个数)&#xff1a;1186 标注…

【LAMMPS学习】十、LAMMPS辅助工具(1)

10. 辅助工具 LAMMPS 被设计为用于执行分子动力学计算的计算内核。设置和分析模拟通常需要额外的预处理和后处理步骤。此类工具的列表可以在 LAMMPS 网页上的以下链接中找到&#xff1a; 前/后处理 外部 LAMMPS 软件包和工具 Pizza.py 工具包 Pizza.py 的最后一个链接是桑迪…

英伟达发布 VILA 视觉语言模型,实现多图像推理、增强型上下文学习,性能超越 LLaVA-1.5

前言 近年来&#xff0c;大型语言模型 (LLM) 的发展取得了显著的成果&#xff0c;并逐渐应用于多模态领域&#xff0c;例如视觉语言模型 (VLM)。VLM 旨在将 LLM 的强大能力扩展到视觉领域&#xff0c;使其能够理解和处理图像和文本信息&#xff0c;并完成诸如视觉问答、图像描…

在springboot项目中自定义404页面

今天点击菜单的时候不小心点开了一个不存在的页面&#xff0c;然后看到浏览器给的一个默认的404页面 后端的程序员都觉得这页面太丑了&#xff0c;那么怎么能自定义404页面呢&#xff1f; 很简单&#xff0c;在我们的springboot的静态资源目录下创建一个error包&#xff0c;然…

开发属于自己的Spring Boot Starter-18

为什么要开发专用的Spring Boot Starter Spring在通常使用时&#xff0c;一般是通过pom.xml文件中引入相关的jar包&#xff0c;然后再通过application.yml文件配置初始化bean的配置&#xff0c;但随着项目越来越复杂或是项目组中的应用数量越来越多&#xff0c;可能会带来几个…

邦注科技 即热式节能模温机的原理及应用介绍

模温机是一种用于控制模具温度的设备&#xff0c;它在各种工业领域中发挥着重要作用&#xff0c;特别是在塑料加工行业中。以下是关于模温机的原理及应用的详细介绍&#xff1a; 原理 模温机的工作原理主要是通过加热和冷却功能&#xff0c;维持模具温度在一个恒定的范围内。…

Redis - hiredis源码安装和接口使用介绍

一、hiredis源码安装说明 本文创作基于 hiredisv1.2.0版本 1.简介 hiredis是一个用于与Redis交互的C语言客户端库。它提供了一组简单易用的API&#xff0c;使开发人员可以轻松地连接到Redis服务器&#xff0c;并执行各种操作&#xff0c;如设置和获取键值对、执行命令、订阅和…

绝地求生:29.2商城更新内容预览:挣脱尘网通行证,经典皮肤返场,空投活动

就在今天历经9小时维护&#xff0c;29.2版本终于上线&#xff0c;柠檬茶带大家一起看看&#xff0c;这次游戏里都更新了哪些内容吧。 挣脱尘网通行证 豪华版&#xff1a;$14.99 普通版&#xff1a;$4.99 豪华版比普通版多10级升级券和2套生存者宝箱 分支一 分支二 分支三 额外…

我21岁玩“撸货”,被骗1000多万

最近&#xff0c;撸货业界内发生了一些颇受瞩目的事件。 在郑州&#xff0c;数码档口下面抢手团长跑路失联&#xff0c;涉及金额几百万&#xff0c;在南京&#xff0c;一家知名的电商平台下的收货站点突然失联&#xff0c;涉及金额高达一千多万&#xff0c;令众多交易者震惊不已…

【oracle】图片转为字节、base64编码等形式批量插入oracle数据库并查询

1.熟悉、梳理、总结下Oracle相关知识体系 2.欢迎批评指正&#xff0c;跪谢一键三连&#xff01; 资源下载&#xff1a; oci.dll、oraocci11.dll、oraociei11.dll3个资源文件资源下载&#xff1a; Instant Client Setup.exe资源下载&#xff1a; oci.dll、oraocci11.dll、oraoc…

CTFshow 爆破

第一题0 抓包发现输入账号密码后数据包会多一个base64编码 所有推出用户密码在传输的时候进行了加密 所以爆破时也用base64加密 设置paylod 用题目给的字典 在添加两条规则 第一个是增加前缀 admin: 第二个是使得payload进行base64编码 取消URL编码字符 因为会把号编码了 开…

【多模态】31、Qwen-VL | 一个开源的全能的视觉-语言多模态大模型

文章目录 一、背景二、方法2.1 模型架构2.2 输入和输出2.3 训练 三、效果3.1 Image Caption 和 General Visual Question Answering3.2 Text-oriented Visual Question Answering3.3 Refer Expression Comprehension3.4 视觉-语言任务的少样本学习3.5 真实世界用户行为中的指令…

【FPGA、maltab】基于FPGA的SOQPSK调制解调技术的设计与实现

基于FPGA的SOQPSK调制解调技术的设计与实现 SOQPSK一、QPSK、OQPSK、SOQPSK之间的关系二、SOQPSK调制原理 matlab 仿真FPGA 实现顶层设计发射模块接收模块顶层调制解调FPGA代码 SOQPSK 一、QPSK、OQPSK、SOQPSK之间的关系 SOQPSK&#xff08;Shaped Offset Quadrature Phase …

Oracle 自治数据库 Select AI 初体验

这几天有点时间&#xff0c;准备尝试下Oracle Select AI&#xff0c;虽然此功能2023年就已经发布了。 Oracle自治数据库已经集成好了Select AI&#xff0c;本文也是讲的这个。 配置 Select AI 需要以下步骤&#xff1a; 创建ADB申请Cohere/OpenAI免费账号设置ADB测试Select…

第十七篇:数据库性能优化的数学视角:理论与实践的融合

数据库性能优化的数学视角&#xff1a;理论与实践的融合 1. 引言 在现代信息技术快速发展的背景下&#xff0c;数据库性能优化已经成为计算机科学领域的一个热点问题。随着数据量的爆炸式增长和用户需求的多样化&#xff0c;数据库系统所承载的数据处理任务变得越来越复杂&…

unity制作app(7)--panel control

根据用户的状态&#xff0c;在界面中显示不同的panel 1.新建一个脚本PanelControl&#xff0c;控制各个脚本的显示与隐藏 2.实现第一个逻辑判断功能&#xff1a;如果没有登记过信息&#xff0c;就直接跳转到登记界面&#xff0c;如果登记过&#xff0c;跳转到住界面。许多需要…

2A 150KHz 40V Buck DC to DC 转换器XL1509

前言&#xff1a; 该器件仅做介绍&#xff0c;不推荐在新设计中使用。 新设计应尽量使用MHZ开关频率&#xff0c;以降低电感量&#xff0c;从而降低成本。 新设计应使用同步DCDC降压转换器。 XL1509丝印和封装 引脚定义 XL1509管脚描述 管脚编号 管脚名称 管脚描述 1 电压输入…

Online RL + IL :Policy Improvement via Imitation of Multiple Oracles

NIPS 2020 paper code 如何利用多个次优专家策略来引导智能体在线学习&#xff0c;后续有多个文章研究该设定下的RL。 Intro 论文探讨了在强化学习&#xff08;RL&#xff09;中&#xff0c;如何通过模仿多个次优策略&#xff08;称为oracle&#xff09;来提升策略性能的问题…

宁静致远(“静”)

宁静致远是一个成语&#xff0c;读音为nng jng zh yuǎn&#xff0c;意思是只有心境平稳沉着、专心致志&#xff0c;才能厚积薄发、 有所作为。出自《淮南子:主术训》。 出处 宁静致远张铭篆刻 此句最早出自西汉初年道家刘安的《淮南子:主术训》&#xff0c;蜀汉丞相诸葛亮的…