跟老齐学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异步任务队列示例
Apr 01 Python
Python学习笔记_数据排序方法
May 22 Python
解决python2.7 查询mysql时出现中文乱码
Oct 09 Python
Python 3中的yield from语法详解
Jan 18 Python
python3 读写文件换行符的方法
Apr 09 Python
python隐藏终端执行cmd命令的方法
Jun 24 Python
python pycharm的安装及其使用
Oct 11 Python
Python使用matplotlib绘制Logistic曲线操作示例
Nov 28 Python
python mysql自增字段AUTO_INCREMENT值的修改方式
May 18 Python
解决pytorch 交叉熵损失输出为负数的问题
Jul 07 Python
通俗讲解python 装饰器
Sep 07 Python
Python 高效编程技巧分享
Sep 10 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地址引用(php地址引用的效率问题)
2012/03/23 PHP
PHP连接MySQL进行增、删、改、查操作
2017/02/19 PHP
EarthLiveSharp中cloudinary的CDN图片缓存自动清理python脚本
2017/04/04 PHP
php使用fputcsv实现大数据的导出操作详解
2020/02/27 PHP
js模拟类继承小例子
2010/07/17 Javascript
jquery ajax的success回调函数中实现按钮置灰倒计时
2013/11/19 Javascript
js日期、星座的级联显示代码
2014/01/23 Javascript
JavaScript实现在数组中查找不同顺序排列的字符串
2014/09/26 Javascript
《JavaScript DOM 编程艺术》读书笔记之DOM基础
2015/01/09 Javascript
JQuery给网页更换皮肤的方法
2015/05/30 Javascript
js生成随机数的过程解析
2015/11/24 Javascript
原生js实现jquery函数animate()动画效果的简单实例
2016/08/21 Javascript
单行 JS 实现移动端金钱格式的输入规则
2017/05/22 Javascript
详解vue 组件之间使用eventbus传值
2017/10/25 Javascript
jquery.onoff实现简单的开关按钮功能(推荐)
2018/05/24 jQuery
微信小程序实现左侧滑动导航栏
2020/04/08 Javascript
Vue实例的对象参数options的几个常用选项详解
2019/11/08 Javascript
Vue获取页面元素的相对位置的方法示例
2020/02/05 Javascript
Javascript 模拟mvc实现点餐程序案例详解
2020/12/24 Javascript
vue3.0 项目搭建和使用流程
2021/03/04 Vue.js
python多进程和多线程究竟谁更快(详解)
2017/05/29 Python
Python selenium抓取虎牙短视频代码实例
2020/03/02 Python
Django+Celery实现动态配置定时任务的方法示例
2020/05/26 Python
python中如何打包用户自定义模块
2020/09/23 Python
发现两个有趣的CSS3动画效果
2013/08/14 HTML / CSS
html5 制作地图当前定位箭头的方法示例
2020/01/10 HTML / CSS
Jones Bootmaker官网:优质靴子和鞋子在线
2020/11/30 全球购物
行政助理岗位职责范文
2013/12/03 职场文书
捐助倡议书范文
2014/04/15 职场文书
教师考核评语
2014/04/28 职场文书
反腐倡廉演讲稿
2014/05/22 职场文书
上课随便讲话检讨书
2014/09/12 职场文书
2014年计划生育协会工作总结
2014/11/14 职场文书
北京青年观后感
2015/06/15 职场文书
MySQL深度分页(千万级数据量如何快速分页)
2021/07/25 MySQL
MySQL的索引你了解吗
2022/03/13 MySQL