跟老齐学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返回真假值(True or False)小技巧
Apr 10 Python
python保存字符串到文件的方法
Jul 01 Python
python+flask实现API的方法
Nov 21 Python
pandas把所有大于0的数设置为1的方法
Jan 26 Python
django-rest-swagger对API接口注释的方法
Aug 29 Python
python实现删除列表中某个元素的3种方法
Jan 15 Python
Python autoescape标签用法解析
Jan 17 Python
解决使用python print打印函数返回值多一个None的问题
Apr 09 Python
python3中sys.argv的实例用法
Apr 24 Python
python中shell执行知识点
May 06 Python
从python读取sql的实例方法
Jul 21 Python
python爬虫利器之requests库的用法(超全面的爬取网页案例)
Dec 17 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生成便于打印的网页
2006/10/09 PHP
PHP模块 Memcached功能多于Memcache
2011/06/14 PHP
PHP中数组定义的几种方法
2013/09/01 PHP
php使用GD库创建图片缩略图的方法
2015/06/10 PHP
PHP基于curl模拟post提交json数据示例
2018/06/22 PHP
麦鸡的TAB切换功能结合了javascript和css
2007/12/17 Javascript
jQuery中parents()方法用法实例
2015/01/07 Javascript
jQuery中live()方法用法实例
2015/01/19 Javascript
DOM基础教程之事件对象
2015/01/20 Javascript
JavaScript中函数表达式和函数声明及函数声明与函数表达式的不同
2015/11/15 Javascript
javascript运算符——逻辑运算符全面解析
2016/06/27 Javascript
Bootstrap基本组件学习笔记之分页(12)
2016/12/08 Javascript
Angular.js中定时器循环的3种方法总结
2017/04/27 Javascript
Vuex持久化插件(vuex-persistedstate)解决刷新数据消失的问题
2019/04/16 Javascript
微信h5静默和非静默授权获取用户openId的方法和步骤
2020/06/08 Javascript
如何实现echarts markline标签名显示自己想要的
2020/07/20 Javascript
vuex中store存储store.commit和store.dispatch的用法
2020/07/24 Javascript
vue实践---根据不同环境,自动转换请求的url地址操作
2020/09/21 Javascript
Vue router安装及使用方法解析
2020/12/02 Vue.js
详解vue-cli项目在IE浏览器打开报错解决方法
2020/12/10 Vue.js
Python struct.unpack
2008/09/06 Python
Python连接SQLServer2000的方法详解
2017/04/19 Python
Python多叉树的构造及取出节点数据(treelib)的方法
2019/08/09 Python
关于Tensorflow使用CPU报错的解决方式
2020/02/05 Python
python实现银行实战系统
2020/02/26 Python
使用keras实现densenet和Xception的模型融合
2020/05/23 Python
python中spy++的使用超详细教程
2021/01/29 Python
HTML5新增form控件和表单属性实例代码详解
2019/05/15 HTML / CSS
数组越界问题
2015/10/21 面试题
综合办公室个人的自我评价
2013/12/22 职场文书
大学四年个人的自我评价
2014/02/26 职场文书
机房搬迁方案
2014/05/01 职场文书
暑期社会实践心得体会
2014/09/02 职场文书
2015初中政治教学工作总结
2015/07/21 职场文书
Django 如何实现文件上传下载
2021/04/08 Python
SSM VUE Axios详解
2021/10/05 Vue.js