初始Python篇(4)—— 元组、字典

找往期文章包括但不限于本期文章中不懂的知识点:

个人主页:我要学编程(ಥ_ಥ)-CSDN博客

所属专栏: Python

目录

元组 

相关概念

元组的创建与删除

元组的遍历 

元组生成式 

字典 

相关概念

字典的创建与删除

字典的遍历与访问

字典的相关操作方法

字典生成式 


元组 

相关概念

元组是Python中内置的不可变序列,与上次我们学习的列表不同,因此元组中不存在增加、删除、修改元素的相关操作。

在Python中使用 () 定义元组,元素与元素之间使用英文的逗号分隔。

同样元组也是属于序列的,因此操作序列的一系列方法也是可以给元组使用的。

元组的创建与删除

语法: 

# 使用()的方式创建元组
元组名 = (element1, element2, ..., elementN)

# 使用内置函数tuple()创建元组
元组名 = tuple(序列)

代码演示:

# 创建元组
# 使用()创建元组
t1 = (1,'Hello',[1,2,3])
print(t1) # 输出为 (1, 'Hello', [1, 2, 3])

# 使用内置函数tuple创建元组
t2 = tuple('Hello') # 字符串是序列
print(t2) # 输出为 ('H', 'e', 'l', 'l', 'o')

t3 = tuple([10,'Hello']) # 列表是序列
print(t3) # 输出为 (10, 'Hello')

从上面的输出结果,我们可以得出一个结论:使用内置函数去创建元组时,序列中的基础元素会被拆解开来,而使用 () 去创建元组,最终的结果就是 () 内部的一个一个的元素。

注意:当创建的元组中只有一个元素时,"逗号"是不能省略的。

代码演示:

t = (3)
print(type(t)) # 输出为 <class 'int'> ——> 整型

t = (3,)
print(type(t)) # 输出为 <class 'tuple'> ——> 元组类型

 元组的删除和列表是一样的,也是使用 关键字 del。

语法:

del 元组名

元组的遍历 

与列表一样,有三种常见的遍历方式:

1、使用for循环:

t =  ('Hello', 'Python',123)
for item in t:
    print(item, end=' ') # 输出为 Hello Python 123

2、使用for循环+range索引:

t =  ('Hello', 'Python',123)
for i in range(0,len(t)):
    print(t[i],end=' ') # 输出为 Hello Python 123

3、使用 enumerate 函数:

语法结构:

for index, item in enumerate(t):
    print(index, item)
 
# index 是序号,不是索引。序号可以手动设置起始位置,索引是不变的
# item 是列表的元素

 代码演示:

t = ('Hello', 'Python',123)
for index,item in enumerate(t, 1):
    print(index,item)

元组生成式 

元组生成式与列表生成式有些不同,列表生成式是直接生成了一个列表对象,而元组生成式是生成了一个生成器对象,需要我们手动地去转换为元组或者列表才行。

代码演示:

# 元组生成式
t = (i for i in range(1,4))
print(t)

# 转换为列表
l = list(t)
print(l)

# 转换为元组
t = tuple(t)
print(t)

当然,除了转换为列表或者元组之外,还可以直接使用for循环和"__next__方法"去遍历生成器对象。

代码演示:

for循环:

t = (i for i in range(1,4))
for item in t:
    print(item,end=' ') # 输出为 1 2 3 

 __next__方法:这个next前后都是有两个下划线的。

t = (i for i in range(1,4))

print(t.__next__()) # 输出为 1
print(t.__next__()) # 输出为 2
print(t.__next__()) # 输出为 3

# __next__方法是每次从生成器对象中取出一个值
# 因此我们都是把这个方法和for循环配合使用

注意:只要这个生成器对象被遍历过一遍之后,这个生成器对象里面的内容就为空了,我们再去遍历就获取不到任何的元素了。

以上就是元组的全部内容了,下面我们来学习字典。

字典 

相关概念

字典类型是根据一个信息查找另一个信息的方式构成了“键值对”,它表示索引用的键和对应的值构成的成对关系。如果学过数据结构的小伙伴,应该对这个概念很熟悉,哈希表就是通过哈希函数的映射方式实现了键值对的时间复杂度为O(1)的查找,而字典就是在数据结构中所学的哈希表。

字典和列表一样是可变的数据类型,具有增删改查的相关操作。在 Python 3.6 及以后的版本中,字典的键在插入顺序上是保持有序的。而在之前的版本中,字典中的键通常被认为是无序的。因为其底层的实现方式就是哈希函数的映射。 虽然现在字典中的键是在插入的顺序上保持有序的,但是我们仍然认为字典的键是无序的。

即字典本身的键是无序的,之所以在输出时,看起来处于有序的状态,是因为Python解释器的处理。

字典中的键要求是不可变的数据类型,且键是不能重复的,但是值是可以重复的。

字典也是序列,因此操作序列的方法也是可以用来操作字典的。

字典的创建与删除

语法结构:

# 使用{}直接创建字典
d = {key1:value1, key2:value2,......}

# 使用内置函数创建字典
# 1、通过映射函数zip创建字典
# lst1、lst2一定要是可迭代的对象
zip(lst1, lst2) # lst1对应着键,lst2对应着值(两者的数量要一一对应)

# 2、通过dict()创建字典
d = dict(key1=value1, key2=value2,......)

代码演示:

# 1、使用{}方式创建
d = {1:'Hello',2:'World',3:'Python'}
print(d) # 输出为 {1: 'Hello', 2: 'World', 3: 'Python'}

# 当键冲突时,前面的值会被覆盖
d = {1:'Hello',2:'World',3:'Python',3:'Java'}
print(d) # 输出为 {1: 'Hello', 2: 'World', 3: 'Java'}

# 2、使用dict()创建
d = dict(Hello=1,Python=2) # 这里的Hello会被当作字符串,作为键
print(d) # 输出为 {'Hello': 1, 'Python': 2}
# 不能直接将数字字面值作为键
# d = dict(1=Hello,2=Python) ——> error

# 3、使用zip函数创建字典
z = zip([1,2,3],['Hello','Python','Java'])
print(z) # 这里也是生成的zip对象

# zip对象需要转换为列表、元组、字典才行,同样只能这个对象只能使用一次
# print(list(z)) # 输出为[(1, 'Hello'), (2, 'Python'), (3, 'Java')]
# print(tuple(z)) # 输出为 ((1, 'Hello'), (2, 'Python'), (3, 'Java'))
print(dict(z)) # 输出为 {1: 'Hello', 2: 'Python', 3: 'Java'}

注意:使用zip函数去创建zip对象时,lst1的元素必须是不可变类型。例如,lst1本身可以是不可变类型,但是其内不能嵌套列表,因为列表是可变的数据类型,不能作为键。

z = zip(([1,2],[3,4]),('Hello','World'))
print(dict(z)) # 这里会报错

但是如果我们将 zip对象 转换为元组或者列表的话,是可以成功的,因为元组和列表没有规定。 

1、转换为列表: 

z = zip(([1,2],[3,4]),('Hello','World'))
print(list(z)) # 输出为 [([1, 2], 'Hello'), ([3, 4], 'World')]

 2、转换为元组:

z = zip(([1,2],[3,4]),('Hello','World'))
print(tuple(z)) # 输出为 (([1, 2], 'Hello'), ([3, 4], 'World'))

删除的字典的语法:

del 字典名

字典的遍历与访问

字典的访问与元组和列表的访问有所不同,其有两种访问方式:

1、通过 d[key] 去访问对应的值:

2、通过 d.get(key) 去访问对应的值: 

代码演示:

d = {1:'Hello',2:'World',3:'Python'}
print(d[1]) # 输出为 Hello
print(d.get(3)) # 输出为 Python

注意:当 键 不存在时,d[key]的方式会报错,而d.get(key)会返回一个默认值:None,当然也可以指定返回默认值。

d = {1:'Hello',2:'World',3:'Python'}
print(d.get('Java',2)) # 输出为 2

这个默认值,可以随便是什么类型的数据。可以字符串、整型、列表等。 

字典的遍历语法:

# 1、遍历key与value的元组
for element in d.items():
    print(element)

# 2、分别遍历key和value
for key,value in d.items():
    print(key,value)

代码演示:

1、遍历key与value的元组:

d = {1:'Hello',2:'World',3:'Python'}
for element in d.items():
    print(element,end=' ') # 输出为 (1, 'Hello') (2, 'World') (3, 'Python')

2、分别遍历key与value: 

for key,value in d.items():
    print(key,'-->',value)
# 输出为
# 1 --> Hello
# 2 --> World
# 3 --> Python

字典的相关操作方法

 字典有一系列相关的操作方法:

字典的方法描述说明
d.keys()获取所有的key数据
d.values()获取所有的value数据
d.pop(key, default)key存在获取相应的value,同时删除key-value对,否则获取默认值
d.popitem()随机从字典中取出一个key-value对,结果为元组类型,同时将该key-value从字典中删除
d.clear()清空字典中所有的key-value对

下面我们就来演示:

d = {1:'Hello',2:'World',3:'Python'}
print(d) # {1: 'Hello', 2: 'World', 3: 'Python'}

# 增加元素,直接可以赋值
d[4] = 'Java'
print(d) # {1: 'Hello', 2: 'World', 3: 'Python', 4: 'Java'}

# 获取所有的key
keys = d.keys()
print(keys) # dict_keys([1, 2, 3, 4])
print(list(keys)) # [1, 2, 3, 4]
print(tuple(keys)) # (1, 2, 3, 4)

# 获取所有的value
values = d.values()
print(values) # dict_values(['Hello', 'World', 'Python', 'Java'])
print(list(values)) # ['Hello', 'World', 'Python', 'Java']
print(tuple(values)) # ('Hello', 'World', 'Python', 'Java')

# 将字典的元素转为 key-value的形式,以元组的形式进行展现
z = d.items()
print(z) # dict_items([(1, 'Hello'), (2, 'World'), (3, 'Python'), (4, 'Java')])
print(list(z)) # [(1, 'Hello'), (2, 'World'), (3, 'Python'), (4, 'Java')]
print(tuple(z)) # ((1, 'Hello'), (2, 'World'), (3, 'Python'), (4, 'Java'))
print(dict(z)) # {1: 'Hello', 2: 'World', 3: 'Python', 4: 'Java'}

# 找到对应key的value,并从字典中删除
print(d.pop(1)) # Hello
print(d) # {2: 'World', 3: 'Python', 4: 'Java'}
print(d.pop(5,"没找到")) # 如果不设置默认值,那么找不到就会报错

# 随机找到一对key-value,并从字典中删除
print(d.popitem()) # (4, 'Java')-->这是随机删除的
print(d) # {2: 'World', 3: 'Python'}

# 清空字典
d.clear()
print(d) # {}

注意:

1、在字典中添加元素是直接使用 d[key] = value 的方式。

2、使用 d.keys() 和 d.values() 得到的结果是与我们之前学习的列表生成式、元组生成式不一样。虽然两者都是迭代器,但是前者是可以循环遍历的,也就是可以转换多次,而后者只能使用一次。

字典生成式 

语法格式:

# 第一种方式:
d = {key:value for item in range}

# 第二种方式:
d = {key:value for key,value in zip(lst1,lst2)}

代码演示:

# 第一种方式:
# 0-2作为键、1-100之间的数作为值
d = {item:random.randint(1,100) for item in range(3)}
print(d) # {0: 22, 1: 65, 2: 52} -> 随机的值

# 第二种方式:
lst1 = [1,2,3]
lst2 = ['张三','李四','王五']
d = {key:value for key,value in zip(lst1,lst2)}
print(d) # {1: '张三', 2: '李四', 3: '王五'}

以上就是字典的全部内容了。

我们现在学习的三种数据类型:列表、元组、字典都是属于序列的一种。

好啦!本期 初始Python篇(4)—— 元组、字典 的学习之旅到此结束啦!我们下一期再一起学习吧!

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

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

相关文章

Maple :一款强大的计算软件,广泛应用于数学、工程、物理和其他科学领域

Maple 是一款强大的计算软件&#xff0c;广泛应用于数学、工程、物理和其他科学领域。它以其符号计算、数值计算和图形可视化能力而闻名&#xff0c;适用于从基础到高级的数学问题。以下是对 Maple 的详细介绍&#xff1a; 1. 基本功能 符号计算 &#xff1a;Maple 能够处理复…

RBAC 模型

系统权限控制最常采用的访问控制模型就是 RBAC 模型 。 什么是 RBAC 呢&#xff1f; RBAC 即基于角色的权限访问控制&#xff08;Role-Based Access Control&#xff09;。这是一种通过角色关联权限&#xff0c;角色同时又关联用户的授权的方式。 简单地说&#xff1a;一个用…

鸿蒙网络编程系列7-TLS安全数据传输单向认证示例

1.TLS简介 TLS&#xff08;Transport Layer Security&#xff09;协议的前身是SSL&#xff08;Secure Socket Layer&#xff09;安全套接层协议&#xff0c;由Netscape公司于1994年提出&#xff0c;是一套网络通信安全协议。IETF&#xff08;The Internet Engineering Task Fo…

ORACLE 19C安装 RAC报错

1. 问题描述 在Oracle 19C RAC的安装过程中&#xff0c;使用克隆方式在两个节点上部署集群。当第一个节点配置好基础服务后&#xff0c;关机并克隆节点。当尝试在第二个节点上通过页面进行RAC安装时&#xff0c;出现以下错误&#xff1a; [INS-32070] Could not remove the n…

Maven--简略

简介 Apache旗下的一款开源项目&#xff0c;用来进行项目构建&#xff0c;帮助开发者管理项目中的jar及jar包之间的依赖&#xff0c;还拥有项目编译、测试、打包的功能。 管理方式 统一建立一个jar仓库&#xff0c;把jar上传至统一的仓库&#xff0c;使用时&#xff0c;配置…

ArcGIS无插件加载(无偏移)在线天地图高清影像与街道地图指南

在地理信息系统&#xff08;GIS&#xff09;的应用中&#xff0c;加载高清影像与街道地图对于地图制图、影像查阅、空间数据分析等工作至关重要。天地图作为官方出品的地图服务&#xff0c;以其标准的数据、较快的影像更新速度等特点受到广泛欢迎。以下是如何在ArcGIS中无插件加…

【论文速读】Prompt Tuning:The Power of Scale for Parameter-Effificient Prompt Tuning

arxiv&#xff1a;2104.08691v2 摘要 在这项工作中&#xff0c;我们探索了“prompt tuning&#xff08;提示调优&#xff09;”&#xff0c;这是一种简单而有效的机制&#xff0c;用于学习“soft prompts&#xff08;软提示&#xff09;”&#xff0c;以条件下冻结的语言模型…

MATLAB智能算法 - AntColonyOptimization蚁群算法

AntColonyOptimization蚁群算法 智能算法是路线规划、深度学习等等一系列领域所使用的优化算法&#xff0c;是算法进阶之路的必备之路。 前言&#xff1a;本文主要围绕解决TSP旅行商问题展开&#xff0c;对于机器人的路线规划以及非线性方程求解的问题等解决方案 对于一些其他优…

leetcode289:生命游戏

根据 百度百科 &#xff0c; 生命游戏 &#xff0c;简称为 生命 &#xff0c;是英国数学家约翰何顿康威在 1970 年发明的细胞自动机。 给定一个包含 m n 个格子的面板&#xff0c;每一个格子都可以看成是一个细胞。每个细胞都具有一个初始状态&#xff1a; 1 即为 活细胞 &am…

Nest.js 实战 (十四):如何获取客户端真实 IP

问题解析 在 Nest.js 应用中&#xff0c;当你试图通过 request.ip 获取客户端的 IP 地址时&#xff0c;如果总是返回 ::1 或者 ::ffff:127.0.0.1&#xff0c;这通常意味着请求来自本地主机。 因为在前后端分离应用中&#xff0c;前端请求后端服务一般的做法都是通过代理&…

springboot051医院管理系统(论文+源码)_kaic

医院管理系统 摘要 随着信息互联网信息的飞速发展&#xff0c;医院也在创建着属于自己的管理系统。本文介绍了医院管理系统的开发全过程。通过分析企业对于医院管理系统的需求&#xff0c;创建了一个计算机管理医院管理系统的方案。文章介绍了医院管理系统的系统分析部分&#…

R语言机器学习遥感数据处理与模型空间预测技术及实际项目案例分析

随机森林作为一种集成学习方法&#xff0c;在处理复杂数据分析任务中特别是遥感数据分析中表现出色。通过构建大量的决策树并引入随机性&#xff0c;随机森林在降低模型方差和过拟合风险方面具有显著优势。在训练过程中&#xff0c;使用Bootstrap抽样生成不同的训练集&#xff…

2024大模型应用实践报告|附35页PDF文件下载

前言 今天分享的是大模型专题系列深度研究报告&#xff1a;《大模型专题&#xff1a;2024大模型应用实践报告&#xff1a;战略一致性&#xff0c;企业成功落地大模型的隐藏秘钥》 &#xff08;报告出品方&#xff1a;爱分析&#xff09; 报告共计&#xff1a;35页 1.报告综述…

某MDM主数据管理系统与微软Dynamic CRM系统(国内节点)集成案例

一、需求分析 需要完成的核心场景&#xff1a; 客户主数据&#xff1a;通过SAP PO集成中间件平台&#xff0c;某MDM主数据实时推送客户主数据信息至微软CRM系统&#xff0c;方便微软CRM系统进行客户方面的管理&#xff0c;并供微软CRM查询员工信息&#xff0c;修改员工&…

大数据-180 Elasticsearch - 原理剖析 索引写入与近实时搜索

点一下关注吧&#xff01;&#xff01;&#xff01;非常感谢&#xff01;&#xff01;持续更新&#xff01;&#xff01;&#xff01; 目前已经更新到了&#xff1a; Hadoop&#xff08;已更完&#xff09;HDFS&#xff08;已更完&#xff09;MapReduce&#xff08;已更完&am…

【Eclipse系列】解决Eclipse中xxx.properties文件中文乱码问题

问题描述&#xff1a;由于eclipse对Properties资源文件的编码的默认设置是ISO-8859-1&#xff0c;所以在打开.properties文件时&#xff0c;会发现中文乱码了&#xff0c;如图&#xff1a; 解决方法&#xff1a; 1、一次生效法 右击该properties文件–>properties–>Re…

暖水毯/取暖毯语音识别控制芯片IC方案

暖水毯、取暖毯作为现代家居生活的温暖伴侣&#xff0c;其智能化升级已是大势所趋。在暖水毯与取暖毯中融入语音识别控制芯片IC方案&#xff0c;为用户的冬日取暖体验带来了革命性的变革。 一、暖水毯/取暖毯增加语音识别控制芯片方案&#xff0c;让产品能通过对话来调节&…

5种边界填充

目录 边界填充需要知道的两个东西什么算边界边界的范围是多少举例 复制填充反射法反射101法外包装法数值填充法原图代码最终效果 边界填充需要知道的两个东西 什么算边界 顾名思义&#xff1a;就是图片的最外边 边界的范围是多少 根据你自己的需要而设置 举例 这里我选择…

SpringBoot中集成海康威视SDK实现布防报警数据上传/交通违章图片上传并在linux上部署(附示例代码资源)

场景 需对接海康威视交通产品中的交通违章检测功能&#xff0c;实现车辆闯红灯时获取抓拍数据(车牌号)并获取上传的抓拍图片。 根据其官方资料设备网络SDK使用手册中说明&#xff0c;此流程需要可以通过报警布防方式进行。 访问官方下载SDK文档等资料 海康威视-引领智能物联…