跟老齐学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中is和id的用法
Apr 03 Python
python实现各进制转换的总结大全
Jun 18 Python
对python中return和print的一些理解
Aug 18 Python
详解python字节码
Feb 07 Python
Python根据已知邻接矩阵绘制无向图操作示例
Jun 23 Python
十分钟搞定pandas(入门教程)
Jun 21 Python
如何利用Python模拟GitHub登录详解
Jul 15 Python
在linux系统下安装python librtmp包的实现方法
Jul 22 Python
Django shell调试models输出的SQL语句方法
Aug 29 Python
Python求平面内点到直线距离的实现
Jan 19 Python
如何在向量化NumPy数组上进行移动窗口
May 18 Python
python使用pymysql模块操作MySQL
Jun 16 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缩略图生成程式(需要GD库支持)
2007/03/06 PHP
PHP Mysql编程之高级技巧
2008/08/27 PHP
Optimizer与Debugger兼容性问题的解决方法
2008/12/01 PHP
PHP基于CURL进行POST数据上传实例
2014/11/10 PHP
PHP概率计算函数汇总
2015/09/13 PHP
PHP实现的简单对称加密与解密方法实例小结
2017/08/28 PHP
改善用户体验的五款jQuery插件分享
2011/05/22 Javascript
JS Pro-深入面向对象的程序设计之继承的详解
2013/05/07 Javascript
Jquery动态进行图片缩略的原理及实现
2013/08/13 Javascript
Javascript中的回调函数和匿名函数的回调示例介绍
2014/05/12 Javascript
nodejs创建web服务器之hello world程序
2015/08/20 NodeJs
小程序hover-class点击态效果实现
2019/02/26 Javascript
vue-autoui自匹配webapi的UI控件的实现
2020/03/20 Javascript
基于python爬虫数据处理(详解)
2017/06/10 Python
AI人工智能 Python实现人机对话
2017/11/13 Python
python2.7安装图文教程
2018/03/13 Python
Win7 64位下python3.6.5安装配置图文教程
2020/10/27 Python
详谈Python中列表list,元祖tuple和numpy中的array区别
2018/04/18 Python
对Python3.6 IDLE常用快捷键介绍
2018/07/16 Python
python字符串查找函数的用法详解
2019/07/08 Python
Python 堆叠柱状图绘制方法
2019/07/29 Python
python pyqtgraph 保存图片到本地的实例
2020/03/14 Python
python绘制趋势图的示例
2020/09/17 Python
Python使用cn2an实现中文数字与阿拉伯数字的相互转换
2021/03/02 Python
html5 Canvas画图教程(9)—canvas中画出矩形和圆形
2013/01/09 HTML / CSS
Mountain Warehouse澳大利亚官网:欧洲家庭户外品牌倡导者
2016/11/20 全球购物
创建索引时需要注意的事项
2013/05/13 面试题
九年级英语教学反思
2014/01/31 职场文书
药学职务聘任书
2014/03/29 职场文书
商场父亲节活动方案
2014/08/27 职场文书
小学国庆节活动总结
2015/03/23 职场文书
初三毕业感言
2015/07/31 职场文书
追悼会家属答谢词
2015/09/29 职场文书
用Python的绘图库(matplotlib)绘制小波能量谱
2021/04/17 Python
Pyhton模块和包相关知识总结
2021/05/12 Python
MySql中的json_extract函数处理json字段详情
2022/06/05 MySQL