跟老齐学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 BeautifulSoup设置页面编码的方法
Apr 03 Python
Python实现读取文件最后n行的方法
Feb 23 Python
Python算法之图的遍历
Nov 16 Python
Python实现基本数据结构中栈的操作示例
Dec 04 Python
Python机器学习之K-Means聚类实现详解
Feb 22 Python
Python高级特性与几种函数的讲解
Mar 08 Python
Python的条件锁与事件共享详解
Sep 12 Python
Python爬取新型冠状病毒“谣言”新闻进行数据分析
Feb 16 Python
解决pytorch 交叉熵损失输出为负数的问题
Jul 07 Python
django 获取字段最大值,最新的记录操作
Aug 09 Python
python入门学习关于for else的特殊特性讲解
Nov 20 Python
Python加密技术之RSA加密解密的实现
Apr 08 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购物车模块功能分析(函数讲解,附源码)
2013/06/25 PHP
php中time()和mktime()方法的区别
2013/09/28 PHP
PHP获取中英混合字符串长度的方法
2014/06/07 PHP
ThinkPHP关于session的操作方法汇总
2014/07/18 PHP
php+mysqli实现将数据库中一张表信息打印到表格里的方法
2015/01/28 PHP
php仿微信红包分配算法的实现方法
2016/05/13 PHP
PHP怎样用正则抓取页面中的网址
2016/08/09 PHP
jQuery 技巧大全(新手入门篇)
2009/05/12 Javascript
js注意img图片的onerror事件的分析
2011/01/01 Javascript
基于jQuery的星级评分插件
2011/08/12 Javascript
JS编程小常识很有用
2012/11/26 Javascript
js仿百度有啊通栏展示效果实现代码
2013/05/28 Javascript
showModalDialog在谷歌浏览器下会返回Null的解决方法
2013/11/27 Javascript
jquery 获取dom固定元素 添加样式的简单实例
2014/02/04 Javascript
Bootstrap按钮组件详解
2016/04/26 Javascript
正则表达式(语法篇推荐)
2016/06/24 Javascript
使用JavaScript获取Request中参数的值方法
2016/09/27 Javascript
Bootstrap3多级下拉菜单
2017/02/24 Javascript
利用node.js实现反向代理的方法详解
2017/07/24 Javascript
vue2导航根据路由传值,而改变导航内容的实例
2017/11/10 Javascript
浅析Vue 生命周期
2018/06/21 Javascript
vue 使用自定义指令实现表单校验的方法
2018/08/28 Javascript
使用post方法实现json往返传输数据的方法
2019/03/30 Javascript
Vue数字输入框组件使用方法详解
2020/02/10 Javascript
OpenLayers3实现对地图的基本操作
2020/09/28 Javascript
[33:15]2018DOTA2亚洲邀请赛3月30日 小组赛B组 VP VS Mineski
2018/03/31 DOTA
浅谈Python爬取网页的编码处理
2016/11/04 Python
Django入门使用示例
2017/12/12 Python
python 将字符串转换成字典dict的各种方式总结
2018/03/23 Python
python实现局域网内实时通信代码
2019/12/22 Python
python利用google翻译方法实例(翻译字幕文件)
2020/09/21 Python
Pytorch模型迁移和迁移学习,导入部分模型参数的操作
2021/03/03 Python
详解CSS3中字体平滑处理和抗锯齿渲染
2017/03/29 HTML / CSS
礼仪培训心得体会
2016/01/22 职场文书
创业计划书之电动车企业
2019/10/11 职场文书
Html5调用企业微信的实现
2021/04/16 HTML / CSS