python基础-基本数据类型深入-2.1

目录

元组

什么是元组(tuple)

元组练习-1

元组的基本操作

元组常用内建函数

列表和元组的区别与总结

元组练习-2

元组练习-3

元组

什么是元组(tuple)

与列表(list)一样,元组(tuple)也是序列,唯一的区别在于元组是不能修改的(你可能注意到了,字符串也不能修改)。元组语法很简单,只要将一些变量用逗号(,)分隔,就能自动创建一个元组。


a = 1,2,3
print(a)print((1,2,3))

1、元组还可用圆括号(())括起(这也是通常采用的做法)。

2、空元组用两个不包含任何内容的圆括号表示。

3、如何表示只包含一个值的元组呢?这有点特殊:虽然只有一个值,也必须在它后面加上逗号。

print((12),type((12)))print((12,),type((12,)))输出:12 <class 'int'>
(12,) <class 'tuple'>

由此可见,加上逗号就变成了元组!

元组练习-1
定义一个元组描述
请从标准输入流(控制台)中获取一个整型数字变量 num_1,一个字符串变量 num_2,请你定义一个元组,包含这两个变量,并打印出来这个元组和它的类型。

num_1 = int(input())
num_2 = eval(input())tuple_1 = (num_1,num_2)
print(tuple_1)
print(type(tuple_1))

元组的基本操作

创建一个元组(tuple)

通过将所有项目(元素)放在括号内 ()(以逗号(,)分隔)来创建元组。括号是可选的,但是,使用括号是一个好习惯。

元组可以具有任意数量的项,并且它们可以具有不同的类型(整数(int),浮点数(float),列表(list),字符串(string)等)。

也可以在不使用括号的情况下创建元组。这称为元组包装。

用一个元素创建一个元组有点特殊。

只有一个元素的元组,括号内仅包含一个元素是不够的。我们将需要一个逗号结尾来表明它实际上是一个元组。


tuple_1 = ("hi")
print(type(tuple_1))tuple_2 = (1)
print(type(tuple_2))tuple_3 = ("hi",)
print(type(tuple_3))tuple_4 = (1.2)
print(type(tuple_4))输出:
<class 'str'>
<class 'int'>
<class 'tuple'>
<class 'float'>

可以看到,元组可以存储多种数据类型!


访问元组元素

我们可以通过多种方式访问元组的元素。

1.索引

我们可以使用索引运算符 [] 访问索引从 0 开始的元组中的项目。

因此,具有 6 个元素的元组将具有从 05 的索引。尝试访问元组之外的元素(例如 67...)将引发 IndexError

索引必须是整数;因此我们不能使用 float 或其他类型。如果使用会导致 TypeError


2.负索引

Python 允许对其序列进行负索引。

索引 -1 表示最后一项,-2 表示倒数第二项,依此类推。

tuple_1 = ('h','e','l','l','o','1')print(tuple_1[-1])
print(tuple_1[-6])输出:
1
h

3.切片

我们可以使用切片运算符冒号 : 访问元组中的一系列项目。

tuple_1 = ('h','e','l','l','o','1')print(tuple_1[2:5])
print(tuple_1[0:5])输出:
('l', 'l', 'o')
('h', 'e', 'l', 'l', 'o')

4、更换元组

与列表不同,元组是不可变的。

这意味着一旦分配了元组的元素就无法更改。但是,如果元素本身是可变的数据类型(如列表),则可以更改其嵌套项目。

我们还可以将元组分配给不同的值(重新分配)。

# 定义一个内嵌列表的元组
tuple_1 = (4, 2, [3], [9])
# 对列表进行添加操作
tuple_1[2].append(5)
print(tuple_1)
my_tuple = ("shell","bash")
# 将元组分配给不同的值
tuple_2 = my_tuple
print(tuple_2)输出:
(4, 2, [3, 5], [9])
('shell', 'bash')

我们可以使用 + 运算符来合并两个元组。这也称为串联

我们还可以使用运算符 *,将元组中的元素重复给定次数。

无论 +* 操作会导致新的记录。

tuple_1 = (1, 2, 3)
tuple_2 = (4, 5, 6)
# 合并两个元组并赋值给新的变量
tuple_3 = tuple_1 + tuple_2
print(tuple_3)
# 将元组中的元素重复 3 次
tuple_4 = ("shell",) * 3
print(tuple_4)输出:
(1, 2, 3, 4, 5, 6)
('shell', 'shell', 'shell')

5、删除元组

我们不能更改元组中的元素。这也意味着我们无法删除或删除元组中的项目。

但是可以使用关键字 del 完全删除一个元组。

tuple_1 = ('s','h','e','l','l')# 不能删除条目
# TypeError: 'tuple_1'对象不支持项目删除
# del my_tuple[3]# 可以删除整个元组
del tuple_1# NameError: 未定义名称“ tuple_1”
print(tuple_1) #如果使用del删除元组,再次打印就会报错!

元组常用内建函数

1、元组方法

元组(tuple)不提供添加项目或删除项目的方法。仅以下两种方法可用。

方法描述
count(x)返回元组内相同元素的数量 x
index(x)返回等于 x 的第一项的索引
my_tuple = ('h','e','l','l','o',)print(my_tuple.count('e'))
print(my_tuple.index('l'))输出:
1
2

2、其他元组操作

2.1元组成员资格测试

我们可以使用关键字 in 来测试项目是否存在于元组中。

tuple_1= ('h','e','l','l','o',)
print('s' in tuple_1)
print('l' in tuple_1)输出:False
True

2.2遍历元组

使用 for 循环,我们可以遍历元组中的每个元素。

for ls in ('shell','bash'):print("hello",ls)输出:
hello shell
hello bash

元组相比于列表的优势

由于元组与列表非常相似,因此它们在类似情况下也都使用。

但是,在列表上实现元组具有某些优点。下面列出了一些主要优点:

  • 我们通常将元组用于异构(不同)数据类型,将列表用于同类(相似)数据类型。
  • 由于元组是不可变的,因此遍历元组要比使用list更快。因此,性能略有提升。
  • 包含不可变元素的元组可以用作字典的键。对于列表,这是不可能的。
  • 如果您拥有不变的数据,则将其实现为元组可以确保其保持写保护。

列表和元组的区别与总结

列表(list)

  1. 列表是动态数组,可变(增加、修改不会使 ID 发生变化)且可以重设长度(包括增加、删除、修改元素)
  2. 列表中的元素可重复,元素之间的类型可以不同,元素的值可以修改
  3. 使用 [] 来定义列表
  4. 可以索引,可以切片
  5. 列表常用来保存多个独立的同质(homogeneous)对象,例如北上广深的人口数量
  6. 由于列表是动态数组,支持 resize 操作,因此当一个列表没有空位放新的元素的时候,Python 会创建一个新的列表,把老的列表里面的元素以及新添加的元素放进去,同时把旧的列表销毁。
  7. 当我们试图创建一个有 n 个元素的列表时,Python 会创建一个可以放 n+k 个元素的列表,为未来添加元素预留了 k 个位置,这样可以减少分配空间和内存复制的次数(很耗费计算资源),从而节省计算资源。
  8. 所以说保存同样的元素个数的时候,元组占用的空间更小。

元组(tuple)

  1. 元组是静态数组,不可变且内部数据一旦创建便无法改变(此外,数字、字符串也属于不可变类型)

  2. 元组里的元素、元组的大小在创建完成以后不能改变,如果赋新的值则 ID 会发生变化

  3. 注意,这里的不可变指的是元组中每一个元素对象的引用(指针)不可变,但是如果某个元素对象本身是可变的对象,那么你是可以对这个可变对象进行修改的。例如,元祖里面有一个元素是列表,这个列表里面的内容是可以修改的。

  4. 元组里元素的类型可以不同

  5. 使用 () 来定义元组

  6. 可以切片、可以索引

  7. 元组常用来描述一个不会改变的事物的多个异质(heterogeneous,对比上面的“同质”,意思是不同位置的元素表达不同的意思)属性,例如一个城市的经纬度。这也是为什么元组不可变而列表可变的原因,因为列表储存同质的对象,例如北上广深的人口数,我们可以再加上成都苏州的人口数、或者删掉深圳的人口数也没有问题,但是元组里面一个城市的经纬度删掉一个或者修改一个是没有意义的。

  8. 关于可变与不可变的另一个例子:你外出散步的时候可以用元组 (x,y) 描述当前的经纬度,如果你想记录自己的轨迹,那么可以用列表记录每一秒的 [(x,y)]

  9. 由于字典的 key 必须是不可变类型,因此列表不能作为字典的 key,但是元组可以

  10. 如果实在想修改已经定义好的元组:

    ①可以通过切片来实现删除元素的功能;

    ②可以通过 + 运算来实现拼接的功能,类似于列表的 resize 操作

  11. 创建元组的速度比创建列表的速度快 3-5 倍。一般不再用到的变量所占用的资源会被释放还给操作系统,但是长度为 1-20 的元组即使不再使用了,也不会把它们占用的资源立刻还给操作系统,而是留作未来使用,这样在以后创建同样大小的元组的时候,就不用重新申请内存了。


元组练习-2
分割元组描述
输入一个长度为偶数的元组 my_tuple,输出两个元组,一个是元组的前一半,一个是元组的后一半。
my_tuple = eval(input())
l = int(len(my_tuple))/2
print(my_tuple[:l])
print(my_tuple[l:])输出:
(1, 2)
(3, 4)

元组练习-3
元素在元组内的出现次数输入一个由整数组成的元组 my_tuple 和一个整数 x,输出元组内 x 的个数。
my_tuple = eval(input())
x = int(input())
print(my_tuple.count(x))

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

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

相关文章

【Web安全靶场】sqli-labs-master 54-65 Challenges 与62关二分法和like模糊搜索

sqli-labs-master 54-65 Challenges 其他关卡和靶场见专栏… 文章目录 sqli-labs-master 54-65 Challenges第五十四关-联合注入第五十五关-联合注入第五十六关-联合注入第五十七关-联合注入第五十八关-报错注入第五十九关-报错注入第六十关-报错注入第六十一关-报错注入第六十…

grid的删除

/u01/11.2.0/grid 为 grid 用户的安装主目录 1、删除 crs 配置信息 root: cd /u01/11.2.0/grid/crs/install perl rootcrs.pl -deconfig -force 2、删除 crs 配置信息&#xff0c;并卸载软件 cd /u01/11.2.0/grid/deinstall ./deinstall grid user: ./deinstall -home /…

Mysql与StarRocks语法上的不同

&#x1f413; 序言 StarRocks 是新一代极速全场景 MPP (Massively Parallel Processing) 数据库。StarRocks 的愿景是能够让用户的数据分析变得更加简单和敏捷。用户无需经过复杂的预处理&#xff0c;可以用StarRocks 来支持多种数据分析场景的极速分析。 &#x1f413; 语法…

嵌入式驱动学习第一周——linux的休眠与唤醒

前言 本文介绍进程的休眠与唤醒。 嵌入式驱动学习专栏将详细记录博主学习驱动的详细过程&#xff0c;未来预计四个月将高强度更新本专栏&#xff0c;喜欢的可以关注本博主并订阅本专栏&#xff0c;一起讨论一起学习。现在关注就是老粉啦&#xff01; 行文目录 前言1. 阻塞和非阻…

第二节 数学知识补充

一、线性代数 向量的 L 2 L_2 L2​范数&#xff08;Euclidean范数/Frobenius范数&#xff09;&矩阵的元素形式范数 向量的 L 2 L_2 L2​范数&#xff1a; ∣ ∣ x ∣ ∣ 2 ( ∣ x 1 ∣ 2 ⋯ ∣ x m ∣ 2 ) 1 2 ||x||_2(|x_1|^2\cdots|x_m|^2)^{\frac12} ∣∣x∣∣2​(∣…

Verilog参数、Verilog参数和属性冲突、整数处理

Verilog参数 Verilog参数执行以下操作&#xff1a; •允许您创建易于重用和扩展的参数化代码。 •使代码更可读、更紧凑、更易于维护。 •将此类功能描述为&#xff1a; ○ 总线尺寸 ○ 建模设计单元中某些重复元素的数量 •是常数。对于参数化模块的每个实例化&#xf…

电脑桌面便签哪个好,好用的电脑桌面便签推荐

在如今信息爆炸的时代&#xff0c;人们的工作和生活节奏越来越快&#xff0c;记事和备忘变得尤为重要。而电脑桌面便签作为一种方便快捷的记录工具&#xff0c;备受广大用户青睐。那么&#xff0c;电脑桌面便签哪个好&#xff0c;哪个更加出色呢&#xff1f; 作为一名人事专员…

CryoEM - 使用 cryoSPARC 基于单颗粒图像从头重构蛋白质三维结构

欢迎关注我的CSDN:https://spike.blog.csdn.net/ 本文地址:https://blog.csdn.net/caroline_wendy/article/details/136384544 基于冷冻电镜单颗粒图像重构蛋白质三维结构,利用冷冻电镜技术测定生物大分子结构的方法。原理是从冷冻电镜获得大量同一种蛋白质分子的二维投影图…

【数据结构】实现队列

大家好&#xff0c;我是苏貝&#xff0c;本篇博客带大家了解队列&#xff0c;如果你觉得我写的还不错的话&#xff0c;可以给我一个赞&#x1f44d;吗&#xff0c;感谢❤️ 目录 一. 队列的概念及结构二. 队列的实现队列的结构体初始化销毁队尾插入队头删除显示第一个节点的值…

【Java程序员面试专栏 算法思维】六 高频面试算法题:动态规划

一轮的算法训练完成后,对相关的题目有了一个初步理解了,接下来进行专题训练,以下这些题目就是汇总的高频题目,本篇主要聊聊回溯算法,主要就是排列组合问题,所以放到一篇Blog中集中练习 题目关键字解题思路时间空间零钱兑换动态规划+双重循环dp[i]表示兑换金额为i元的最少…

从0开始学习NEON(0)

1、前言 ​ 最近在学习NEON指令集&#xff0c;主要学习"单指令流&#xff0c;多数据流"的编程方式&#xff0c;在这之前主要是针对cuda编程进行学习。最近的一部分工作转移到了arm主板上&#xff0c;接触到了 ncnn这个开源项目&#xff0c;不得不佩服nihui的强大。在…

C# 线性插值

线性插值是一种常用的插值算法&#xff0c;适用于许多实际场景。 传感器数据处理&#xff1a;在传感器数据处理中&#xff0c;可能会出现数据点不连续或不均匀的情况。使用线性插值可以根据已知的数据点来估算在两个数据点之间的数值&#xff0c;从而填补数据中的缺失或不连续之…

iOS消息转发流程

当向Objc对象发送消息时&#xff0c;如果找到对象对应的方法&#xff0c;就会进入消息转发流程&#xff0c;给开发者提供一些最后的机会处理消息无法发送问题&#xff0c;以免出现程序崩溃。 1. 回调对象的resolveInstanceMethod方法&#xff0c;在这个方法中&#xff0c;允许开…

阿里云定价_ECS产品价格_云服务器收费标准 - 阿里云官方活动

2024年最新阿里云服务器租用费用优惠价格表&#xff0c;轻量2核2G3M带宽轻量服务器一年61元&#xff0c;折合5元1个月&#xff0c;新老用户同享99元一年服务器&#xff0c;2核4G5M服务器ECS优惠价199元一年&#xff0c;2核4G4M轻量服务器165元一年&#xff0c;2核4G服务器30元3…

logo设计软件及网站汇总

文章目录 一、智能设计logo的网站二、常用的logo设计软件 一、智能设计logo的网站 Canva&#xff1a;Canva是一个在线设计平台&#xff0c;提供了丰富的模板和设计工具&#xff0c;可以帮助用户轻松设计出专业水平的logo。 DesignEvo&#xff1a;DesignEvo是一个专业的在线log…

基于 LLaMA 和 LangChain 实践本地 AI 知识库

有时候,我难免不由地感慨,真实的人类世界,本就是一个巨大的娱乐圈,即使是在英雄辈出的 IT 行业。数日前,Google 正式对外发布了 Gemini 1.5 Pro,一个建立在 Transformer 和 MoE 架构上的多模态模型。可惜,这个被 Google 寄予厚望的产品并未激起多少水花,因为就在同一天…

动作生成学习笔记

目录 ReMoDiffus 检索和扩散 文字生运动 action生运动 ReMoDiffus 检索和扩散 ICCV 2023 | 重塑人体动作生成,融合扩散模型与检索策略的新范式ReMoDiffuse来了,根据文本生成动作 有例子和模型&

CSS 显示隐藏动画(动画失效问题)

就像这个动画一样的效果&#xff0c;div 先是隐藏的&#xff0c;点击按钮后显示并且有动画效果&#xff0c;隐藏的时候同样。 <button class"btn" id"btn">点击</button><div class"box" id"box"></div><s…

一些常用到的git命令

git stash -a //缓存所有文件 git checkout -b dev origin/dev //切换到dev分支上,接着跟远程的origin地址上的dev分支关联起来 //推送本地分支到远程仓库 git push origin localbranchname:remotebrancname git revert onefile //https://www.freecodecamp.org/news/git-re…

S2---FPGA-A7板级原理图硬件实战

视频链接 FPGA-A7板级系统硬件实战01_哔哩哔哩_bilibili FPGA-A7板级原理图硬件实战 基于XC7A100TFGG484的FPGA硬件设计流程图 A7核心板&#xff0c;是基于XILINX公司的ARTIX-7系列100T的XC7A100T,2FGG484I这款芯片开发的高性能核心板&#xff0c;具有高速&#xff0c;高带宽&a…