跟老齐学Python之有点简约的元组


Posted in Python onSeptember 24, 2014

关于元组,上一讲中涉及到了这个名词。本讲完整地讲述它。

先看一个例子:

>>>#变量引用str
>>> s = "abc"
>>> s
'abc'

>>>#如果这样写,就会是...
>>> t = 123,'abc',["come","here"]
>>> t
(123, 'abc', ['come', 'here'])

上面例子中看到的变量t,并没有报错,也没有“最后一个有效”,而是将对象做为一个新的数据类型:tuple(元组),赋值给了变量t。

元组是用圆括号括起来的,其中的元素之间用逗号隔开。(都是英文半角)

tuple是一种序列类型的数据,这点上跟list/str类似。它的特点就是其中的元素不能更改,这点上跟list不同,倒是跟str类似;它的元素又可以是任何类型的数据,这点上跟list相同,但不同于str。

>>> t = 1,"23",[123,"abc"],("python","learn")  #元素多样性,近list
>>> t
(1, '23', [123, 'abc'], ('python', 'learn'))

>>> t[0] = 8                  #不能原地修改,近str
Traceback (most recent call last):
 File "<stdin>", line 1, in <module>
TypeError: 'tuple' object does not support item assignment

>>> t.append("no") 
Traceback (most recent call last):
 File "<stdin>", line 1, in <module>
AttributeError: 'tuple' object has no attribute 'append'
  >>>

从上面的简单比较似乎可以认为,tuple就是一个融合了部分list和部分str属性的杂交产物。此言有理。

像list那样访问元素和切片

先复习list中的一点知识:

>>> one_list = ["python","qiwsir","github","io"]
>>> one_list[2]
'github'
>>> one_list[1:]     
['qiwsir', 'github', 'io']
>>> for word in one_list:
...   print word
... 
python
qiwsir
github
io
>>> len(one_list)
4

下面再实验一下,上面的list如果换成tuple是否可行

>>> t
(1, '23', [123, 'abc'], ('python', 'learn'))
>>> t[2]
[123, 'abc']
>>> t[1:]
('23', [123, 'abc'], ('python', 'learn'))
>>> for every in t:
...   print every
... 
1
23
[123, 'abc']
('python', 'learn')
>>> len(t)
4

>>> t[2][0]   #还能这样呀,哦对了,list中也能这样
123
>>> t[3][1]
'learn'

所有在list中可以修改list的方法,在tuple中,都失效。

分别用list()和tuple()能够实现两者的转化:

>>> t     
(1, '23', [123, 'abc'], ('python', 'learn'))
>>> tls = list(t)              #tuple-->list
>>> tls
[1, '23', [123, 'abc'], ('python', 'learn')]

>>> t_tuple = tuple(tls)          #list-->tuple
>>> t_tuple
(1, '23', [123, 'abc'], ('python', 'learn'))

tuple用在哪里?

既然它是list和str的杂合,它有什么用途呢?不是用list和str都可以了吗?

在很多时候,的确是用list和str都可以了。但是,看官不要忘记,我们用计算机语言解决的问题不都是简单问题,就如同我们的自然语言一样,虽然有的词汇看似可有可无,用别的也能替换之,但是我们依然需要在某些情况下使用它们.

一般认为,tuple有这类特点,并且也是它使用的情景:

Tuple 比 list 操作速度快。如果您定义了一个值的常量集,并且唯一要用它做的是不断地遍历它,请使用 tuple 代替 list。
如果对不需要修改的数据进行 “写保护”,可以使代码更安全。使用 tuple 而不是 list 如同拥有一个隐含的 assert 语句,说明这一数据是常量。如果必须要改变这些值,则需要执行 tuple 到 list 的转换 (需要使用一个特殊的函数)。

Tuples 可以在 dictionary 中被用做 key,但是 list 不行。实际上,事情要比这更复杂。Dictionary key 必须是不可变的。Tuple 本身是不可改变的,但是如果您有一个 list 的 tuple,那就认为是可变的了,用做 dictionary key 就是不安全的。只有字符串、整数或其它对 dictionary 安全的 tuple 才可以用作 dictionary key。
Tuples 可以用在字符串格式化中,后面会用到。

Python 相关文章推荐
可用于监控 mysql Master Slave 状态的python代码
Feb 10 Python
利用Celery实现Django博客PV统计功能详解
May 08 Python
Python OpenCV获取视频的方法
Feb 28 Python
python3中的md5加密实例
May 29 Python
Python3.5 Pandas模块之DataFrame用法实例分析
Apr 23 Python
Python中常用的8种字符串操作方法
May 06 Python
Python使用urllib模块对URL网址中的中文编码与解码实例详解
Feb 18 Python
Django使用list对单个或者多个字段求values值实例
Mar 31 Python
解析Tensorflow之MNIST的使用
Jun 30 Python
python matplotlib工具栏源码探析三之添加、删除自定义工具项的案例详解
Feb 25 Python
python tqdm用法及实例详解
Jun 16 Python
如何使用pdb进行Python调试
Jun 30 Python
跟老齐学Python之dict()的操作方法
Sep 24 #Python
Python单链表的简单实现方法
Sep 23 #Python
Python中bisect的用法
Sep 23 #Python
python元组操作实例解析
Sep 23 #Python
Python中实现两个字典(dict)合并的方法
Sep 23 #Python
python实现去除下载电影和电视剧文件名中的多余字符的方法
Sep 23 #Python
Python中的类学习笔记
Sep 23 #Python
You might like
B2K与车机的中波PK
2021/03/02 无线电
发款php蜘蛛统计插件只要有mysql就可用
2010/10/12 PHP
深入解析phpCB批量转换的代码示例
2013/06/27 PHP
PHP图片等比例缩放生成缩略图函数分享
2014/06/10 PHP
PHP实现格式化文件数据大小显示的方法
2015/01/03 PHP
laravel学习教程之关联模型
2016/07/30 PHP
laravel5.2表单验证,并显示错误信息的实例
2019/09/29 PHP
随机显示经典句子或诗歌的javascript脚本
2007/08/04 Javascript
jQuery UI Dialog控件中的表单无法正常提交的解决方法
2010/12/19 Javascript
鼠标左键单击冲突的问题解决方法(防止冒泡)
2014/05/14 Javascript
jQuery中queue()方法用法实例
2014/12/29 Javascript
JavaScript动态数量的文件上传控件
2016/11/18 Javascript
原生JS轮播图插件
2017/02/09 Javascript
vue.js的手脚架vue-cli项目搭建的步骤
2017/08/30 Javascript
JavaScript中重名的函数与对象示例详析
2017/09/28 Javascript
[47:53]DOTA2上海特级锦标赛主赛事日 - 1 败者组第一轮#2COL VS Spirit
2016/03/02 DOTA
利用Python如何实现数据驱动的接口自动化测试
2018/05/11 Python
详解Python3的TFTP文件传输
2018/06/26 Python
解决python字典对值(值为列表)赋值出现重复的问题
2019/01/20 Python
利用python实现短信和电话提醒功能的例子
2019/08/08 Python
keras 获取某层输出 获取复用层的多次输出实例
2020/05/23 Python
PIL.Image.open和cv2.imread的比较与相互转换的方法
2020/06/03 Python
PyQt5 QDockWidget控件应用详解
2020/08/12 Python
HTML5 HTMLCollection和NodeList的区别详解
2020/04/29 HTML / CSS
德国高尔夫商店:Golfshop.de
2019/06/22 全球购物
香港艺人陈冠希创办的潮流品牌:JUICESTORE
2021/03/04 全球购物
杭州时比特电子有限公司SQL
2013/08/22 面试题
WEB控件可以激发服务端事件,请谈谈服务端事件是怎么发生并解释其原理?自动传回是什么?为什么要使用自动传回?
2012/02/21 面试题
PPP协议组成及简述协议协商的基本过程
2015/05/28 面试题
考试不及格的检讨书
2014/01/22 职场文书
《落花生》教学反思
2014/02/25 职场文书
“学雷锋活动月”总结
2014/03/09 职场文书
小学竞选班干部演讲稿
2014/08/20 职场文书
党政领导班子群众路线对照检查材料
2014/10/26 职场文书
Javascript中的解构赋值语法详解
2021/04/02 Javascript
关于pytest结合csv模块实现csv格式的数据驱动问题
2022/05/30 Python