跟老齐学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 相关文章推荐
Python查看多台服务器进程的脚本分享
Jun 11 Python
用Python编写分析Python程序性能的工具的教程
Apr 01 Python
给Python中的MySQLdb模块添加超时功能的教程
May 05 Python
python常用函数详解
Sep 13 Python
Django中cookie的基本使用方法示例
Feb 03 Python
python实现k-means聚类算法
Feb 23 Python
python样条插值的实现代码
Dec 17 Python
Python 给屏幕打印信息加上颜色的实现方法
Apr 24 Python
django的model操作汇整详解
Jul 26 Python
基于Python和PyYAML读取yaml配置文件数据
Jan 13 Python
PyCharm最新激活码PyCharm2020.2.3有效
Nov 18 Python
Python干货实战之八音符酱小游戏全过程详解
Oct 24 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
php adodb介绍
2009/03/19 PHP
深入Memcache的Session数据的多服务器共享详解
2013/06/13 PHP
解析PHP中的正则表达式以及模式匹配
2013/06/19 PHP
PHP函数之日期时间函数date()使用详解
2013/09/09 PHP
php操作(删除,提取,增加)zip文件方法详解
2015/03/12 PHP
jQuery操作Select选择的Text和Value(获取/设置/添加/删除)
2013/03/06 Javascript
PHP守护进程实例
2015/03/06 Javascript
javascript实现的多个层切换效果通用函数实例
2015/07/06 Javascript
js判断手机访问或者PC的几个例子(常用于手机跳转)
2015/12/15 Javascript
AngularJs动态加载模块和依赖注入详解
2016/01/11 Javascript
基于jquery插件编写countdown计时器
2016/06/12 Javascript
JavaScript实现复制文章自动添加版权
2016/08/02 Javascript
jq实现左滑显示删除按钮,点击删除实现删除数据功能(推荐)
2016/08/23 Javascript
微信小程序 网络API Websocket详解
2016/11/09 Javascript
jQuery实现字符串全部替换的方法
2016/12/12 Javascript
微信小程序 参数传递实例代码
2017/03/20 Javascript
angularjs性能优化的方法
2018/09/05 Javascript
在vue中v-bind使用三目运算符绑定class的实例
2018/09/29 Javascript
angularjs http与后台交互的实现示例
2018/12/21 Javascript
详解vue-router导航守卫
2019/01/19 Javascript
详解React项目中碰到的IE问题
2019/03/14 Javascript
用python代码做configure文件
2014/07/20 Python
python pandas 对时间序列文件处理的实例
2018/06/22 Python
python PIL和CV对 图片的读取,显示,裁剪,保存实现方法
2019/08/07 Python
Python传递参数的多种方式(小结)
2019/09/18 Python
如何使用scrapy中的ItemLoader提取数据
2020/09/30 Python
实习教师自我鉴定
2013/09/27 职场文书
美发店5.1活动方案
2014/01/24 职场文书
家长会邀请书
2014/01/25 职场文书
《童年》教学反思
2014/02/18 职场文书
2014预防青少年违法犯罪工作总结
2014/12/10 职场文书
清明节扫墓活动总结
2015/02/09 职场文书
业务员辞职信范文
2015/03/02 职场文书
红色故事汇观后感
2015/06/18 职场文书
python 批量压缩图片的脚本
2021/06/02 Python
十大最强岩石系宝可梦,怪颚龙实力最强,第七破坏力很强
2022/03/18 日漫