Python基础教程系列:六、元组

实际上元组是跟列表非常相近的另一种容器类型.元组和列表看起来不同的一点是元组用的是圆括号而列表用的是方括号。而功能上,元组和列表相比有一个很重要的区别,元组是一种不可变类型。正因为这个原因,元组能做一些列表不能做的事情。比如用做一个字典的key。另外当处理一组对象时,这个组默认是元组类型.比如  x, y = 1, 2   ;   x, y ---->(1, 2)

所以呢,在这一章节,我们基本就不再从头到尾挨个说了,它和列表的基本操作都是一样的。

我们重点说一下元组和列表间的转换以及元组和列表的区别。

在三个标准不可变类型里面--数字,字符串和元组字符串--元组是受到影响最大的,一个数据类型是不可变的,简单来讲,就意味着一旦一个对象被定义了,它的值就不能再被更新,除非重新创建一个新的对象.对数字和字符串的影响不是很大,因为它们是标量类型,当它们代表的值改变时,这种结果是有意义的,是按照你所想要的方式进行访问的,而对于元组,事情就不是这样了。因为元组是容器对象,很多时候你想改变的只是这个容器中的一个或者多个元素,不幸的是这是不可能的,切片操作符不能用作左值进行赋值。这和字符串没什么不同,切片操作只能用于只读的操作。但是不可变并不是坏事,比如我们把数据传给一个不了解的API 时,可以确保我们的数据不会被修改。同样地,如果我们操作从一个函数返回的元组,可以通过内建list()函数把它转换成一个列表.

当你确实需要对元组中的某些元素进行修改,我们可以通过list()先把元组转换成列表类型进行编辑;同样当我们编辑完列表,需要将列表“封装”起来,我们可以通过tuple()函数将字符串或列表转换成元组。这个过程在实际解决问题过程中也是使用最为频繁的。

但是,尽管元组具有不可变性,但也不是意味着一点招没有,字符串也具有不可变性,但仍然可以通过“+”连接操作符进行连接,尽管这个过程是创建了一个新的对象,但从解决问题的实际角度考虑,我们最终的目的不是判断是不是同一个目的,而仅仅是想得到所需要的新的字符串而已。所以元组也可以进行类似的操作。

列表 VS 元组
    为什么我们要区分元组和列表变量?这个问题也可以被表述为“我们真的需要两个相似的序列类型吗?”,一个原因是在有些情况下,使用其中的一种类型要优于使用另一种类型。最好使用不可变类型变量的一个情况是,如果你在维护一些敏感的数据,并且需要把这些数据传递给一个并不了解的函数(或许是一个根本不是你写的API),作为一个只负责一个软件某一部分的工程师,如果你确信你的数据不会被调用的函数篡改,你会觉得安全了许多。一个需要可变类型参数的例子是,如果你在管理动态数据集合时。你需要先把它们创建出来,逐渐地或者不定期的添加它们,或者有时还要移除一些单个的元素。这是一个必须使用可变类型对象的典型例子。幸运的是,通过内建的list()和tuple()转换函数,你可以非常轻松的在两者之间进行转换.list()和tuple()函数允许你用一个列表来创建一个元组,反之亦然.如果你有一个元组变量,但你需要一个列表变量因为你要更新一下它的对象,这时list()函数就是你最好的帮手.如果你有一个列表变量,并且想把它传递给一个函数,或许一个API,而你又不想让任何人弄乱你的数据,这时tuple()函数就非常有用。

时间: 2024-10-27 07:48:46

Python基础教程系列:六、元组的相关文章

Python基础教程系列:七、字典

字典是Python语言中唯一的映射类型.映射类型不要求用数字值做索引就可以从一个容器中获取对应的数据项.你可以用键(key)直接映射到值,这就是为什么叫映射的原因,映射,我的理解就是索引,顺藤摸瓜就可以找到背后的幕后者.字典是Python中最强大的数据类型之一. 刚开始接触字典还是在Hadoop中的mapreduce,其实说白了就是键值对(key/value),所谓的索引通常是指key,而幕后者通常指的是value.每个key对应一个value,主要的好处是方面归类,而且按照key进行查找val

Python基础教程系列:九、文件操作

一.open()函数 open()以及file()(open()与file()等价,可以任意替换)提供了初始化输入/输出(I/O)操作的通用接口.open()函数成功打开一个文件后就会返回一个文件对象,说白了你就可以接着读写了,否则就bug了. 语法:file_object = open(file_name, access_mode='r', buffering=-1) 第一个参数是文件名或者路径(绝对或相对路径),第二个参数叫文件打开的模式,不写时默认是'r'模式.'r'模式是只读模式.'w'

Python基础教程系列:五、序列

列表也是序列的一种,所以对于列表的操作同样适用于列表.也可以通过下标或者切片操作来访问某一个或者某个子列表.那么列表和字符串有什么区别呢?首先字符串必须只能由字符组成,即便字符串中有数字,那也是字符类型的数字,不可直接用于数学计算,其次,字符串中的字符具有不可变性.但是列表是可以保留任意数目的Python对象的灵活容器,就像一个大箱子,什么对象都可以往里放.列表具有元素可变性,在序列中,列表是唯一一种支持元素可变性的数据结构.列表在形式上类似于C.Java中的数组,但与数组还是有很大区别的.数组

Python基础教程系列:七、字典(续)

不好意思,昨天有急事耽搁了,今天我们接着说字典.首先通过key往字典中添加三条记录.其中方括号中的那就是key,等式右边的就是value,别学完了序列后,总感觉中括号中的那是下角标. 那么字典的更新,包括增.删.改也都分别作了介绍.删除整个字典相对较少,毕竟实际工作中不像做练习,随便删了就可以.那么真想删除整个字典,del dict1即可.其中pop(),这不就相当于出栈操作么,取出来了也就相当于删除了. 字典操作: 1.字典比较:cmp(),这个比较起来也比较复杂,毕竟也不是完全数与数比大小或

Python基础教程系列:八、条件与循环

其实作为条件判断语句或者循环语句,我们在前面已经多多少少涉及了一些,现在我们再做一些补充或者把几个要注意的地方说一下.主要有以下常用语句:if.while.for,以及相互搭配使用的else.elif.break.continue和pass. 我们挨个简单说一下,简单的一笔带过就可以了,因为大家都学了C,所以主要说一下与C的不同之处. 1.if与else: if expression:         语句1 语句2 -- 条件语句(expression)不需写在括号中,整个Python语言不使

python基础教程(六)

学到这里已经很不耐烦了,前面的数据结构什么的看起来都挺好,但还是没法用它们做什么实际的事.从这一章节开始有点难度,需要好好理解. 基本语句的更多用法 使用逗号输出 >>> print 'age:',25 age: 25 如果想要同时输出文本和变量值,却又不希望使用字符串格式化的话,那这个特性就非常有用了: >>> name = 'chongshi' >>> salutation = 'Mr' >>> greeting = 'Hello

Python基础教程 第六章 学习笔记

收集函数 把实际参收集到元组和字典当中 1 def print_params(*params): 2 print(params) 3 """ 4 print_parasm(1,2,3) 5 output: (1,2,3) 6 """ 7 8 def print_params_2(**params): 9 print(params) 10 11 """ 12 print_params_2(x=1, y=2, z=3)

.Net程序员之Python基础教程学习----列表和元组 [First Day]

一. 通用序列操作: 其实对于列表,元组 都属于序列化数据,可以通过下表来访问的.下面就来看看序列的基本操作吧. 1.1 索引: 序列中的所有元素的下标是从0开始递增的. 如果索引的长度的是N,那么所以的范围是-N~N-1之间,超过这个范围就会提示 IndexError:  index out of range >>> greeting ='Hello world' >>> print greeting Hello world >>> print gr

Python基础教程(第二章 列表和元组)

本文内容全部出自<Python基础教程>第二版,在此分享自己的学习之路. ______欢迎转载:http://www.cnblogs.com/Marlowes/p/5293195.html______ Created on Xu Hoo 本章将引入一个新的概念:数据结构.数据结构是通过某种方式(例如对元素进行编号)组织在一起的数据元素的集合,这些数据元素可以是数字或者字符,甚至可以是其他数据结构.在Python中,最基本的数据结构是序列(sequence),序列中的每个元素被分配一个序号——即