跟老齐学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装饰器使用示例及实际应用例子
Mar 06 Python
Python编程实现双击更新所有已安装python模块的方法
Jun 05 Python
Python学习之Anaconda的使用与配置方法
Jan 04 Python
Python数据结构之图的应用示例
May 11 Python
Python3字符串encode与decode的讲解
Apr 02 Python
pandas对dataFrame中某一个列的数据进行处理的方法
Jul 08 Python
Django自带日志 settings.py文件配置方法
Aug 30 Python
Python enumerate内置库用法解析
Feb 24 Python
Python自定义sorted排序实现方法详解
Sep 18 Python
使用py-spy解决scrapy卡死的问题方法
Sep 29 Python
搭建pypi私有仓库实现过程详解
Nov 25 Python
python 写一个水果忍者游戏
Jan 13 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
上海地方志办公室-上海电子仪表工业志
2021/03/04 无线电
深入理解PHP之require/include顺序 推荐
2011/01/02 PHP
php判断上传的Excel文件中是否有图片及PHPExcel库认识
2013/01/11 PHP
php 基础函数
2017/02/10 PHP
PHP CURL中传递cookie的方法步骤
2019/05/09 PHP
Hutia 的 JS 代码集
2006/10/24 Javascript
javascript 学习笔记(六)浏览器类型及版本信息检测代码
2011/04/08 Javascript
30个精美的jQuery幻灯片效果插件和教程
2011/08/23 Javascript
JQuery中使用Ajax赋值给全局变量失败异常的解决方法
2014/08/18 Javascript
在JavaScript中操作数组之map()方法的使用
2015/06/09 Javascript
轻松实现js弹框显示选项
2016/09/13 Javascript
轻松实现js选项卡切换效果
2016/09/24 Javascript
详解webpack 多页面/入口支持&amp;公共组件单独打包
2017/06/29 Javascript
JavaScript实现连连看连线算法
2019/01/05 Javascript
JS简易计算器实例讲解
2020/06/30 Javascript
vue中使用vue-pdf的方法详解
2020/09/05 Javascript
详解实现vue的数据响应式原理
2021/01/20 Vue.js
[47:02]2018DOTA2亚洲邀请赛3月29日 小组赛B组 VP VS paiN
2018/03/30 DOTA
[52:22]EG vs VG Supermajor小组赛B组 BO3 第一场 6.2
2018/06/03 DOTA
Python挑选文件夹里宽大于300图片的方法
2015/03/05 Python
python简单获取本机计算机名和IP地址的方法
2015/06/03 Python
python xml解析实例详解
2016/11/14 Python
linux环境下python中MySQLdb模块的安装方法
2017/06/16 Python
tensorflow TFRecords文件的生成和读取的方法
2018/02/06 Python
Python3 pip3 list 出现 DEPRECATION 警告的解决方法
2019/02/16 Python
python实现比对美团接口返回数据和本地mongo数据是否一致示例
2019/08/09 Python
Python双链表原理与实现方法详解
2020/02/22 Python
Pytorch高阶OP操作where,gather原理
2020/04/30 Python
python 实现aes256加密
2020/11/27 Python
浅谈html5 video 移动端填坑记
2018/01/15 HTML / CSS
Jo Malone美国官网:祖玛珑香水
2017/03/27 全球购物
同事打架检讨书
2014/02/04 职场文书
CAD制图人员的自荐信
2014/02/07 职场文书
教师校本培训方案
2014/02/26 职场文书
孔繁森观后感
2015/06/10 职场文书
Python函数式编程中itertools模块详解
2021/09/15 Python