跟老齐学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+Opencv识别两张相似图片
Mar 23 Python
Python实现对象转换为xml的方法示例
Jun 08 Python
python使用itchat库实现微信机器人(好友聊天、群聊天)
Jan 04 Python
Python实现获取前100组勾股数的方法示例
May 04 Python
Python中如何将一个类方法变为多个方法
Dec 30 Python
使用tensorflow显示pb模型的所有网络结点方式
Jan 23 Python
完美解决jupyter由于无法import新包的问题
May 26 Python
opencv 图像加法与图像融合的实现代码
Jul 08 Python
Python logging模块原理解析及应用
Aug 13 Python
Python大批量搜索引擎图像爬虫工具详解
Nov 16 Python
Python3爬虫RedisDump的安装步骤
Feb 20 Python
python树莓派通过队列实现进程交互的程序分析
Jul 04 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库为页面增加水印示例代码
2014/03/24 PHP
从零开始学YII2框架(五)快速生成代码工具 Gii 的使用
2014/08/20 PHP
PHP中使用php://input处理相同name值的表单数据
2015/02/03 PHP
Android App中DrawerLayout抽屉效果的菜单编写实例
2016/03/21 PHP
laravel配置Redis多个库的实现方法
2019/04/10 PHP
jQuery使用手册之二 DOM操作
2007/03/24 Javascript
IE JS编程需注意的内存释放问题
2009/06/23 Javascript
javascript获取ckeditor编辑器的值(实现代码)
2013/11/18 Javascript
从零学jquery之如何使用回调函数
2014/05/16 Javascript
基于NodeJS的前后端分离的思考与实践(四)安全问题解决方案
2014/09/26 NodeJs
把多个JavaScript函数绑定到onload事件处理函数上的方法
2016/09/04 Javascript
Bootstrap Table表格一直加载(load)不了数据的快速解决方法
2016/09/17 Javascript
基于Angularjs+mybatis实现二级评论系统(仿简书)
2017/02/13 Javascript
AngularJS表单提交实例详解
2017/02/18 Javascript
vue如何获取点击事件源的方法
2017/08/10 Javascript
vue中使用sessionStorage记住密码功能
2018/07/24 Javascript
简单了解three.js 着色器材质
2020/08/03 Javascript
Python模拟浏览器上传文件脚本的方法(Multipart/form-data格式)
2018/10/22 Python
详解Python安装tesserocr遇到的各种问题及解决办法
2019/03/07 Python
简单了解Python3 bytes和str类型的区别和联系
2019/12/19 Python
解决pyCharm中 module 调用失败的问题
2020/02/12 Python
详解python中GPU版本的opencv常用方法介绍
2020/07/24 Python
python简单实现插入排序实例代码
2020/12/16 Python
深入理解HTML5定时器requestAnimationFrame的使用
2018/12/12 HTML / CSS
Luxplus荷兰:以会员价购买美容产品等,独家优惠
2019/08/30 全球购物
波兰运动鞋网上商店:Distance.pl
2020/07/30 全球购物
幼儿园家长会邀请函
2014/01/15 职场文书
打架检讨书100字
2014/01/19 职场文书
国窖1573广告词
2014/03/21 职场文书
商务日语专业自荐信
2014/04/17 职场文书
小区文明倡议书
2014/05/16 职场文书
过程装备与控制工程专业求职信
2014/07/02 职场文书
大一新生军训新闻稿
2015/07/17 职场文书
vue 实现上传组件
2021/05/31 Vue.js
MySQL非空约束(not null)案例讲解
2021/08/23 MySQL
Python借助with语句实现代码段只执行有限次
2022/03/23 Python