跟老齐学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 04 Python
pandas 读取各种格式文件的方法
Jun 22 Python
pandas 数据索引与选取的实现方法
Jun 21 Python
浅谈Python 敏感词过滤的实现
Aug 15 Python
Django自带日志 settings.py文件配置方法
Aug 30 Python
Tensorflow:转置函数 transpose的使用详解
Feb 11 Python
Python2.7:使用Pyhook模块监听鼠标键盘事件-获取坐标实例
Mar 14 Python
TensorFlow的环境配置与安装教程详解(win10+GeForce GTX1060+CUDA 9.0+cuDNN7.3+tensorflow-gpu 1.12.0+python3.5.5)
Jun 22 Python
django前端页面下拉选择框默认值设置方式
Aug 09 Python
Python爬虫代理池搭建的方法步骤
Sep 28 Python
教你使用Pandas直接核算Excel中快递费用
May 12 Python
python和C/C++混合编程之使用ctypes调用 C/C++的dll
Apr 29 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下通过伪造http头破解防盗链的代码
2010/07/03 PHP
PHP SESSION机制的理解与实例
2019/03/22 PHP
PHP进阶学习之垃圾回收机制详解
2019/06/18 PHP
解析使用js判断只能输入数字、字母等验证的方法(总结)
2013/05/14 Javascript
js判断字符是否是汉字的两种方法小结
2014/01/03 Javascript
Javascript浮点数乘积运算出现多位小数的解决方法
2014/02/17 Javascript
可恶的ie8提示缺少id未定义
2014/03/20 Javascript
使用原生JS实现弹出层特效
2014/12/22 Javascript
javascript结合fileReader 实现上传图片
2015/01/30 Javascript
JavaScript代码轻松实现网页内容禁止复制(代码简单)
2015/10/23 Javascript
日常收藏的jquery技巧
2015/12/02 Javascript
JS组件Bootstrap实现弹出框和提示框效果代码
2015/12/08 Javascript
移动端 一个简单易懂的弹出框
2016/07/06 Javascript
Node.js操作redis实现添加查询功能
2017/05/25 Javascript
浅谈在fetch方法中添加header后遇到的预检请求问题
2017/08/31 Javascript
原生javascript AJAX 三级联动的实现代码
2018/05/04 Javascript
浅谈Vuex注入Vue生命周期的过程
2019/05/20 Javascript
JavaScript实现世界各地时间显示
2020/09/07 Javascript
ant design vue嵌套表格及表格内部编辑的用法说明
2020/10/28 Javascript
[39:02]DOTA2亚洲邀请赛 3.31 小组赛 B组 Mineski vs VGJ.T
2018/04/01 DOTA
深入理解python中的select模块
2017/04/23 Python
python利用requests库模拟post请求时json的使用教程
2018/12/07 Python
Python3中lambda表达式与函数式编程讲解
2019/01/14 Python
详解Python中的测试工具
2019/06/09 Python
新版Pycharm中Matplotlib不会弹出独立的显示窗口的问题
2020/06/02 Python
Python图像阈值化处理及算法比对实例解析
2020/06/19 Python
HTML5之SVG 2D入门5—颜色的表示及定义方式
2013/01/30 HTML / CSS
搞笑爱情保证书
2014/04/29 职场文书
企业晚会策划方案
2014/05/29 职场文书
立志成才演讲稿
2014/09/04 职场文书
王金山在党的群众路线教育实践活动总结大会上的讲话稿
2014/10/25 职场文书
2014七年级班主任工作总结
2014/12/05 职场文书
统计员岗位职责范本
2015/04/14 职场文书
2015年公司保安年终工作总结
2015/05/14 职场文书
办公室卫生管理制度
2015/08/04 职场文书
SpringAop日志找不到方法的处理
2021/06/21 Java/Android