Python序列之元组

系列文章目录

Python序列之列表


Python序列之元组

  • 系列文章目录
  • 前言
  • 一、元组是什么?
  • 二、元组操作
    • 1.元组的创建
      • (1)通过`()`创建。小括号可以省略。
      • (2)通过`tuple()`函数创建。
      • (3)通过生成器推导式创建。
    • 2.元组的访问
      • (1)元组的元素不能修改
      • (2)元组的元素访问、index()、count()、切片等操作,和列表一样。
      • (3)通过`zip()`函数合成元组后访问
    • 3. 元组的排序
    • 4.元组的统计
  • 三、总结


前言

前面我们已经讲了Python中的列表:Python序列之列表。今天我们再来看一下Python中另一种常用的序列——元组。


提示:以下是本篇文章正文内容,下面案例可供参考

一、元组是什么?

在这里插入图片描述
列表属于可变序列,可以任意修改列表中的元素。
元组属于不可变序列,不能修改元组中的元素。因此,元组没有增加元素、修改元素、删除元素相关的方法。
因此,我们只需学元组的创建和删除,元素的访问和计数即可。元组支持如下操作:

  • 索引访问
  • 切片操作
  • 连接操作
  • 成员关系操作
  • 比较运算操作
  • 计数:元组长度len()、最大值max()、最小值min()、求和sum()等

二、元组操作

1.元组的创建

(1)通过()创建。小括号可以省略。

如果元组只有一个元素,则必须后面加逗号。这是因为解释器会把(1)解释为整数1,(1,)解释为元组。

a = (1,)
b = (1)
c = 1,print(type(a))  # 输出:<class 'tuple'>
print(type(b))  # 输出:<class 'int'>
print(type(c))  # 输出:<class 'tuple'>

(2)通过tuple()函数创建。

语法:tuple(可迭代的对象)

a = tuple()  # 创建一个空元组: ()
b = tuple('yyy')  # ('y', 'y', 'y')
c = tuple(range(3))  # (0, 1, 2)
d = tuple([2, 3, 4])  # (2, 3, 4)

总结:

  • tuple()可以接收列表、字符串、其他序列类型、选代器等生成元组。
  • list()可以接收元组、字符串、其他序列类型、选代器等生成列表。

(3)通过生成器推导式创建。

从形式上看,生成器推导式与列表推导式类似,只是生成器推导式使用小括号

列表推导式直接生成列表对象,生成器推导式生成的不是列表 也不是元组 ,而是一个生成器对象

我们可以通过生成器对象,转化成列表或者元组。也可以使用生成器对象的__next__()方法进行遍历,或者直接作为迭代器对象来使用。不管什么方式使用,元素访问结束后,如果需要重新访问其中的元素,必须重新创建该生成器对象,换句话说,生成器对象只能遍历一次,是一次性用品

a = (x*10 for x in range(5))
print(a)  # 输出:<generator object <genexpr> at 0x000001A5D2CC44A0>
b = tuple(a)
print(b)  # 输出:(0, 10, 20, 30, 40)
c = tuple(a)
print(c)  # 输出:()

上面第二次使用生成器a生成元组c的时候,竟然生成了一个空元组,这说明生成器对象是一次性用品。

下面使用__next__()方法的遍历,最后出现了报错,也可以说明生成器的一次性属性:

a = (x for x in range(3))
print(a.__next__())  # 输出:0
print(a.__next__())  # 输出:1
print(a.__next__())  # 输出:2
print(a.__next__())  # 输出:报错:StopIteration

2.元组的访问

(1)元组的元素不能修改

a = (20, 10, 30, 9, 8)
a[3]=33  # 报错:TypeError: 'tuple' object does not support item assignment

(2)元组的元素访问、index()、count()、切片等操作,和列表一样。

a = (30, 5, 8, 9, 8)
print(a[1])  # 输出:5
print(a[1:3])  # 输出:(5, 8)
print(a[:4])  # 输出:(30, 5, 8, 9)
print(a.count(8))  # 输出:2
print(a.index(30))  # 输出:0

(3)通过zip()函数合成元组后访问

zip(列表1,列表2,...)将多个列表对应位置的元素组合成为元组,并返回这个zip对象。如果各个迭代器的元素个数不一致,则返回列表长度与最短的对象相同。

a = [10, 20, 30]
b = [40, 50, 60]
c = [70, 80, 90, 100]
d = zip(a, b, c)
print(d)  # 输出:<zip object at 0x00000262542A4E00>
e = list(d)  
print(e)  # 输出:[(10, 40, 70), (20, 50, 80), (30, 60, 90)]

zip在英文中意味“拉链”,在Python中是将多个元组像拉拉链一样合成为一个列表,方便使用for循环遍历。

那zip的实战意义在哪呢?给你举个实际的例子就明白了:

authors = ['吴承恩', '曹雪芹', '罗贯中', '施耐庵']
books = ['西游记', '红楼梦', '三国演义', '水浒传']
for author, book in zip(authors, books):print(author+':'+book)

打印效果如下:

吴承恩:西游记
曹雪芹:红楼梦
罗贯中:三国演义
施耐庵:水浒传

3. 元组的排序

列表关于排序的方法list.sort()是修改原列表对象,由于元组是不可修改的,故元组没有该方法。如果要对元组排序,只能使用内置函数sorted(tupleObj),并生成新的列表对象。

a = (3, 6, 1, 100, 5, 4)
b = sorted(a)
print(b)  # 输出:[1, 3, 4, 5, 6, 100]

4.元组的统计

a = (1, 2, 3)
print(max(a))  # 输出:3
print(min(a))  # 输出:1
print(sum(a))  # 输出:6

三、总结

  • 元组的核心特点是:不可变序列。
  • 元组的访问和处理速度比列表快。
  • 与整数和字符串一样,元组可以作为字典的键,列表则永远不能作为字典的键使用。

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

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

相关文章

Eclipse 下载 开源项目 maven依赖丢失和 Deployment Assembly 丢失

周末下载了最新的jeecg的源码来瞅瞅&#xff0c;但是下载后发现&#xff0c;pom文件中定义的依赖都丢失了。 如下图 上网搜索了一下啊&#xff0c;发现需要先给这个项目这个项目 disable maven nature 然后再添加上再给这个项目添加maven支持。 如下图&#xff1a; 然后再查看项…

HTML CSS样式表布局

一、position&#xff1a;fixed 锁定位置&#xff08;相对于浏览器的位置&#xff09;&#xff0c;例如有些网站的右下角的弹出窗口。 示例&#xff1a; 二、position&#xff1a;absolute 1.外层没有position&#xff1a;absolute&#xff08;或relative&#xff09;&#xff…

SVN服务器搭建和使用(一)

2019独角兽企业重金招聘Python工程师标准>>> Subversion是优秀的版本控制工具,其具体的的优点和详细介绍,这里就不再多说. 感谢原文博主&#xff1a;http://www.cnblogs.com/xiaobaihome/archive/2012/03/20/2407610.html 首先来下载和搭建SVN服务器. 现在Subver…

解决vue-pdf报错TypeError: Cannot read properties of undefined (reading ‘catch‘)

使用vue-pdf插件后&#xff0c;报错 解决方法&#xff1a;找到node_modules/vue-pdf/src/pdfjsWrapper.js文件&#xff0c;注释掉下面的代码

Memcached缓存在.Net 中的使用(memcacheddotnet)

From: http://www.cnblogs.com/xibei666/p/4863604.html 缓存对于提高大数据量的网站性能无疑不是一个很好的解决方案&#xff0c;针对缓存的使用网上同仁介绍很多&#xff0c;再次我仅仅分享一下自己对Memcached使用的简单介绍。Memchached的使用通过第三方DLL来完成&#xff…

git合并代码冲突

场景&#xff1a;多人共同更改同一文件代码时候&#xff0c;可能回引发代码冲突。此时需要选择某一方或者双方代码进行合并。 采用当前更改&#xff1a;就是保留本地修改。 采用传入的更改&#xff1a;就是选择线上已有的覆盖更改。 保留双方更改&#xff1a;就是两份都保存。

[转]T4模版引擎之基础入门

本文转自&#xff1a;http://www.cnblogs.com/lzrabbit/archive/2012/07/15/2591085.html 额&#xff0c;T4好陌生的名字&#xff0c;和NuGet一样很悲催&#xff0c;不为世人所熟知&#xff0c;却又在背后默默无闻的奉献着&#xff0c;直到现在我们项目组的人除了我之外&#x…

请问WCF 跟 WebService之间异同

From: http://tommyhu.cn/wcf-WebService-qu-bie/ 问题&#xff1a; WCF与 Web Service的区别是什么&#xff1f; 和ASP.NET Web Service有什么关系&#xff1f; WCF与ASP.NET Web Service的区别是什么&#xff1f; 这是很多.NET开发人员容易搞错的问题。面试的时候也经常遇到…

报错 Cannot read properties of undefined (reading ‘ajax‘); Cannot read property ‘ajax‘ of undefined

jQuery中使用ajax发送请求&#xff0c;报错 Cannot read properties of undefined (reading ajax)&#xff1b; Cannot read property ajax of undefined 错误代码 $.ajax({type:"POST",url:"pageServlet",data:jsonData,dataType:"json",succe…

「初步」Spring与commons的BeanUtil.copyProperties

2019独角兽企业重金招聘Python工程师标准>>> ###org.apache.commons.beanutils.BeanUtils 的是 public static void copyProperties(Object dest, Object orig) throws###org.​springframework.​beans.​BeanUtils 的是 public static void copyProperties(Object…

WCF技术剖析之十一:异步操作在WCF中的应用(上篇)

From: http://www.cnblogs.com/artech/archive/2009/07/08/1519423.html 按照操作执行所需的资源类型&#xff0c;我们可以将操作分为CPU绑定型&#xff08;CPU Bound&#xff09;操作和I/O绑定型&#xff08;I/O Bound&#xff09;操作。对于前者&#xff0c;操作的执行主要利…

vue2使用vant组件库;使用rem后vant组件样式变小了。

vue2使用vant组件库 文章目录vue2使用vant组件库一、vant是什么&#xff1f;二、使用步骤1.引入vant2库2.引入 自动按需引入组件3.在main.js中按需引入组件&#xff08;推荐&#xff09;4.或者只是在某个index.vue内使用&#xff08;推荐&#xff09;5.在main.js中导入所以组件…

EditPlus自定义模板

直接用图表达了,不详之处可以留言. 1.查看帮助中的关于,确定文本编辑器的版本是否一致 2.如图 3.如图 4.这个test.html 需要事先编辑并拷贝到EditPlus的安装目录 5.新建空白html 时,效果如下: 6.方便大家,代码贴上来. html> <head> <title>网页标题…

【Android】Android开发启动app弹出一张广告图片,Dialog可以查看大图,查看某个图片功能...

作者&#xff1a;程序员小冰&#xff0c;GitHub主页&#xff1a;https://github.com/QQ986945193 新浪微博&#xff1a;http://weibo.com/mcxiaobing 首先给大家看一下我们今天这个最终实现的效果图&#xff1a; 首先说一下&#xff0c;这里利用的是一个dialog&#xff0c;然…

el-dialog弹框中img图片保持比例最大化;图片保持比例最大化

图片保持比例最大化 <el-dialog :visible.sync"dialogVisible" center class"look_img_dia"><img width"100%" :src"dialogImageUrl" alt"" /></el-dialog>.look_img_dia {/deep/.el-dialog {margin-top…

Wireshark技巧-过滤规则和显示规则

From: http://www.cnblogs.com/icez/p/3973873.html Wireshark是一个强大的网络协议分析软件&#xff0c;最重要的它是免费软件。 过滤规则 只抓取符合条件的包&#xff0c;在Wireshark通过winpacp抓包时可以过滤掉不符合条件的包&#xff0c;提高我们的分析效率。 如果要填写过…

easyUI 展开DataGrid里面的行显示详细信息

http://blog.csdn.net/yanghongchang_/article/details/7854156原著 datagrid 可以改变它的view(视图)去显示不同的效果.使用详细视图,datagrid可以显示展开按钮("" 或者 "-")在数据行的左边,用户可以展开一个行去显示一个附加的详细信息. 查看 Demo 步骤 …

理解OAuth 2.0(转)

From: http://www.mamicode.com/info-detail-1610036.html 理解OAuth 2.0 作者&#xff1a; 阮一峰 日期&#xff1a; 2014年5月12日 OAuth是一个关于授权&#xff08;authorization&#xff09;的开放网络标准&#xff0c;在全世界得到广泛应用&#xff0c;目前的版本是2.0版。…

wcf返回datatable必须给tablename赋值

From: http://www.cnblogs.com/hxw/archive/2010/07/10/1774841.html 最近在学习WCF,返回datatable的时候老是出现“An error occurred while receiving the HTTP response to http://localhost:9999/calculatorservice. This could be due to the service endpoint binding no…

微信支付开发(1) JS API支付

From: http://www.cnblogs.com/txw1958/p/wxpayv3-jsapi.html 关键字&#xff1a;微信支付 微信支付v3 jsapi支付 统一支付 Native支付 prepay_id 作者&#xff1a;方倍工作室 原文: http://www.cnblogs.com/txw1958/p/wxpayv3-jsapi.html 本文介绍微信支付下的jsapi实现流程…