跟老齐学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 字符串split的用法分享
Mar 23 Python
一个基于flask的web应用诞生 bootstrap框架美化(3)
Apr 11 Python
简述:我为什么选择Python而不是Matlab和R语言
Nov 14 Python
Python实现的选择排序算法示例
Nov 29 Python
python 查找文件名包含指定字符串的方法
Jun 05 Python
基于Python的PIL库学习详解
May 10 Python
Django中使用 Closure Table 储存无限分级数据
Jun 06 Python
Django高级编程之自定义Field实现多语言
Jul 02 Python
Python aiohttp百万并发极限测试实例分析
Oct 26 Python
python dataframe NaN处理方式
Dec 26 Python
python操作微信自动发消息的实现(微信聊天机器人)
Jul 14 Python
使用Python拟合函数曲线
Apr 14 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
PHP5与MySQL数据库操作常用代码 收集
2010/03/21 PHP
简单的cookie计数器实现源码
2013/06/07 PHP
php连接oracle数据库的核心步骤
2016/05/26 PHP
js统计页面的来访次数实现代码
2014/05/09 Javascript
js实例属性和原型属性示例详解
2014/11/23 Javascript
JavaScript 匿名函数和闭包介绍
2015/04/13 Javascript
jQuery实现美观的多级动画效果菜单代码
2015/09/06 Javascript
深入探讨javascript函数式编程
2015/10/11 Javascript
javascript实现五星评分功能
2015/11/10 Javascript
jQuery鼠标悬浮链接弹出跟随图片实例代码
2016/01/08 Javascript
Javascript字符串常用方法详解
2016/07/21 Javascript
ES6新特性二:Iterator(遍历器)和for-of循环详解
2017/04/20 Javascript
socket io与vue-cli的结合使用的示例代码
2018/11/01 Javascript
JS造成内存泄漏的几种情况实例分析
2020/03/02 Javascript
如何在现代JavaScript中编写异步任务
2021/01/31 Javascript
[04:50]2019DOTA2高校联赛秋季赛四强集锦
2019/12/27 DOTA
实例Python处理XML文件的方法
2015/08/31 Python
Python使用自带的ConfigParser模块读写ini配置文件
2016/06/26 Python
python pandas 组内排序、单组排序、标号的实例
2018/04/12 Python
对numpy中的where方法嵌套使用详解
2018/10/31 Python
Python使用pymongo库操作MongoDB数据库的方法实例
2019/02/22 Python
树莓派4B+opencv4+python 打开摄像头的实现方法
2019/10/18 Python
Pandas数据分析的一些常用小技巧
2021/02/07 Python
浅谈Html5多线程开发之WebWorkers
2018/05/02 HTML / CSS
台湾菁英交友:结识黄金单身的台湾人
2018/01/22 全球购物
联想德国官网:Lenovo Germany
2018/07/04 全球购物
英国日常交易网站:Wowcher
2018/09/04 全球购物
Nike香港官网:Nike HK
2019/03/23 全球购物
马耳他航空公司官方网站:Air Malta
2019/05/15 全球购物
澳大利亚床上用品、浴巾和家居用品购物网站:Bambury
2020/04/16 全球购物
应届生服装设计自我评价
2013/09/20 职场文书
大课间体育活动方案
2014/03/12 职场文书
高中生评语大全
2014/04/25 职场文书
民主生活会剖析材料
2014/09/30 职场文书
关于分班的感言
2015/08/04 职场文书
centos8安装nginx1.9.1的详细过程
2021/08/02 Servers