当前位置: 首页 > news >正文

Python基础学习笔记(七)——元组

目录

  • 一、一维元组的介绍、创建与修改
  • 二、组合的基本操作
    • 1. 遍历
    • 2. 取长度
    • 3. 取最值
    • 4. 打包
    • 5. 批处理
      • 5.1 map()函数
      • 5.2 lambda 表达式
      • 5.3 lambda 表达式 + map()函数

一、一维元组的介绍、创建与修改

  元组tuple),一种不可变、有序、可重复的数据结构,属于不可变序列,由小括号()内、用逗号分隔的一组元素组成。

  与同为序列的列表一样,元组的元素可以是任意数据类型的对象引用,并通过索引访问元素;但区别于可变序列,我们无法直接对元组进行增删改操作

  准确的说,应该是元组对对象的引用,也就是元素id不能改变。如果元素指向不可变对象,那么改变它通常指的是改变id;但如果元素指向可变对象,则可以修改值而内存地址不变

# 修改元组
t = (1, [2])
t[1][0] = 1print(t)
(1, [1])

  在实际应用中,不可变序列有一定优势。为了防止多端同时操作发生混乱,通常会在某一端操作时,对数据结构上。在多任务环境下,同时操作多个可变对象需要加锁,而不可变对象则不用。这是因为,它们只能被浏览或取出数据,而不能被修改,所以在程序中尽量使用不可变序列。

  与列表同理,元组同样有赋值创建引用创建,对应类似的函数tuple()。我们可以通过tuple()list()实现元组的间接修改,即:使用list()函数把元组转化成列表,然后在列表上进行修改,最后使用tuple()转化回元组。

# 空元组
t = ()
t = tuple()# 赋值创建
t = (1,)  # 单元素元组的创建格式
t = (1, 2, 3)
t = 1, 2, 3  # 省略写法# 引用创建
t = tuple([1, 2, 3])
print(t)# 间接修改
lst = list(t)
lst[0] = 0
t = tuple(lst)
print(t)
(1, 2, 3)
(0, 2, 3)


二、组合的基本操作

  元组属于序列,适用于序列的所有基本操作,这部分内容在Python基础学习笔记(六)——列表中,这里不再重复。

  以下操作适用于所有组合,包括列表、元组、字符串、集合、字典,下面主要以元组为例。

1. 遍历

t = 1, 2, 3
for i in t:print(i)
1
2
3


2. 取长度

  len()函数:返回组合内的元素个数

t = 1, 2, 3
print(len(t))
3


3. 取最值

  max()函数:返回可迭代对象内元素的最大值
  min()函数:返回可迭代对象内元素的最小值

t = 1, 2, 3
print(max(t), min(t))
3 1


4. 打包

  zip()函数:将一个或多个可迭代对象对应元素依次打包成元组,并返回由这些元组组成的zip对象迭代器。若输入的可迭代对象的长度不同,打包的元组数量取最短可迭代对象的长度

d = {'a': 1}                           
t = 1, 2                               
s = {'a', 'b', 'c'}   # 打包单个可迭代对象                          
for i in zip(d):                       print(i)          # 打包多个不同长度的可迭代对象        
print(list(zip(t, s)))                                                         
('a',)
[(1, 'c'), (2, 'a')]


5. 批处理

5.1 map()函数

  map(function, iterable)函数:对可迭代对象中的每一个元素调用指定函数,返回一个map对象迭代器

t = 1, 2for i in map(float, t):print(i)
1.0
2.0


5.2 lambda 表达式

  lambda表达式是一种匿名函数,可在非正式定义函数的情况下使用。它由关键字lambda开头,后接参数列表,然后用冒号分隔,最后是一个表达式
  它们通常作为临时函数,用于执行简单操作或为其他函数传递参数

add = lambda x, y: x + y
print(add(2, 3))
5


5.3 lambda 表达式 + map()函数

  该模式允许我们更灵活地进行多个可迭代对象之间的自定义运算

t1 = 1, 2, 3
t2 = 11, 22, 33
t3 = 10, 20, 30
# 参数列表与iterable依次对应
print(list(map(lambda x, y, z: x*y-z, t1, t2, t3)))  
[1, 24, 69]

相关文章:

  • python从入门到精通02
  • SELINUX=enforcing时无法启动httpd服务的解决方案(semanage命令以及setroubleshoot-server插件的妙用)
  • 门禁-jenkins的构建状态同步到gitlab提交流水线
  • C++中的模板类的定义与使用
  • win11 通过防火墙设置-开通本地端口
  • Linux Tcpdump抓包入门
  • 汇编实现的操作系统
  • k8s二进制安装与部署
  • 05. Redis 持久化
  • 解决在cmd里下载的库,但IDLE还是显示不存在的问题
  • 多分类逻辑回归:一种基于概率的分类方法
  • 【JAVA系列】JAVA与C#中List分组、排序方法
  • 【c++游戏】harry potter(破解版)
  • 定制Jackson 的ObjectMapper(编程式),自定义json转换处理器来指定序列化和反序列化规则。
  • 心链2---前端开发(整合路由,搜索页面,用户信息页开发)
  • 【5+】跨webview多页面 触发事件(二)
  • 【Under-the-hood-ReactJS-Part0】React源码解读
  • 【每日笔记】【Go学习笔记】2019-01-10 codis proxy处理流程
  • canvas实际项目操作,包含:线条,圆形,扇形,图片绘制,图片圆角遮罩,矩形,弧形文字...
  • Java 多线程编程之:notify 和 wait 用法
  • Java深入 - 深入理解Java集合
  • Map集合、散列表、红黑树介绍
  • Node.js 新计划:使用 V8 snapshot 将启动速度提升 8 倍
  • Otto开发初探——微服务依赖管理新利器
  • PHP 7 修改了什么呢 -- 2
  • Python socket服务器端、客户端传送信息
  • spring学习第二天
  • Vue2.0 实现互斥
  • 面试题:给你个id,去拿到name,多叉树遍历
  • 模仿 Go Sort 排序接口实现的自定义排序
  • 前端相关框架总和
  • 前端之Sass/Scss实战笔记
  • 使用agvtool更改app version/build
  • 使用API自动生成工具优化前端工作流
  • 为物联网而生:高性能时间序列数据库HiTSDB商业化首发!
  • 问题之ssh中Host key verification failed的解决
  • 想使用 MongoDB ,你应该了解这8个方面!
  • Java数据解析之JSON
  • Nginx惊现漏洞 百万网站面临“拖库”风险
  • ​如何防止网络攻击?
  • # Panda3d 碰撞检测系统介绍
  • #LLM入门|Prompt#2.3_对查询任务进行分类|意图分析_Classification
  • #图像处理
  • (iPhone/iPad开发)在UIWebView中自定义菜单栏
  • (MonoGame从入门到放弃-1) MonoGame环境搭建
  • (Oracle)SQL优化基础(三):看懂执行计划顺序
  • (Repost) Getting Genode with TrustZone on the i.MX
  • (附源码)计算机毕业设计ssm电影分享网站
  • (含react-draggable库以及相关BUG如何解决)固定在左上方某盒子内(如按钮)添加可拖动功能,使用react hook语法实现
  • (考研湖科大教书匠计算机网络)第一章概述-第五节1:计算机网络体系结构之分层思想和举例
  • (每日持续更新)信息系统项目管理(第四版)(高级项目管理)考试重点整理 第13章 项目资源管理(七)
  • (欧拉)openEuler系统添加网卡文件配置流程、(欧拉)openEuler系统手动配置ipv6地址流程、(欧拉)openEuler系统网络管理说明
  • (十八)devops持续集成开发——使用docker安装部署jenkins流水线服务
  • (学习日记)2024.04.04:UCOSIII第三十二节:计数信号量实验
  • (转)平衡树