|
|
|
|
移动端

2.2.6 元组

《自学Python:编程基础、科学计算及数据分析》第2章Python 基础,在本章中,我们将学习Python 语言的基本使用,掌握Python 的基本使用方法,为后续的学习打下基础。本节为大家介绍元组。

作者:李金来源:机械工业出版社|2018-05-03 17:05

技术沙龙 | 邀您于8月25日与国美/AWS/转转三位专家共同探讨小程序电商实战

2.2.6 元组

元组(Tuple)是一种与列表类似的序列类型。元组的基本用法与列表十分类似,只不过元组一旦创建,就不能改变,因此,元组可以看成是一种不可变的列表。

1.元组的生成和基本操作

Python用一对括号“()”生成元组,中间的元素用逗号“,”隔开:

  1. In [1]: (10, 11, 12, 13, 14)   
  2. Out[1]: (10, 11, 12, 13, 14) 

对于含有两个或以上元素的元组,在构造时可以省略括号:

  1. In [2]: t = 10, 11, 12, 13, 14   
  2. Out[3]: t   
  3. Out[3]: (10, 11, 12, 13, 14) 

元组可以通过索引和切片来查看元素,规则与列表一样。

元组的索引得到单个元素:

  1. In [4]: t[0]   
  2. Out[4]: 10 

切片得到一个子元组:

  1. In [5]: t[1:3]   
  2. Out[5]: (11, 12) 

不过,元组不支持用索引和切片进行修改:

  1. In [6]: t[0] = 1  
  2. TypeError   Traceback (most recent call last)   
  3. <ipython-input-6-da6c1cabf0b0> in <module>()   
  4. ----> 1 t[0] = 1   
  5.  
  6. TypeError: 'tuple' object does not support item assignment 

2.只含单个元素的元组

由于小括号“()”在表达式中有特殊的含义,因此,对于只含有单个元素的元组,如果我们只加括号,Python会认为这是普通的表达式:

  1. In [7]: a = (10)   
  2. In [8]: type(a)   
  3. Out[8]: int  

a的类型并不是元组,而是整型。为了定义只含一个元素的元组,我们需要在元素后面加上一个额外的逗号“,”,告诉Python这是一个元组:

  1. In [9]: a = (10,)   
  2. In [10]: type(a)   
  3. Out[10]: tuple  

单元素元组的括号也可以省略,但额外的逗号不可以:

  1. In [11]: a = 10,   
  2. In [12]: type(a)   
  3. Out[12]: tuple  

3.元组的方法

由于元组是不可变的,所以它只支持.count()方法和.index()方法,其用法与列表一致:

  1. In [13]: a = (10, 11, 12, 13, 14)   
  2. In [14]: a.count(10)   
  3. Out[14]: 1   
  4. In [15]: a.index(12)   
  5. Out[15]: 2  

4.列表与元组的互相转换

列表和元组可以使用tuple()函数和list()函数互相转换:

  1. In [16]: list(a)   
  2. Out[16]: [10, 11, 12, 13, 14]   
  3. In [17]: tuple([10, 11, 12, 13, 14])   
  4. Out[17]: (10, 11, 12, 13, 14)  

5.列表与元组的生成速度比较

在 IPython中,可以使用魔术命令%timeit来对代码的运行进行计时。%timeit可以计算后面一行代码的运行速度。

我们比较一下 Python中列表与元组的生成速度:

  1. In [19]: %timeit [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21]   
  2. 1000000 loops, best of 3: 456 ns per loop   
  3. In [20]: %timeit (1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21)   
  4. 10000000 loops, best of 3: 23 ns per loop 

可以看到,元组的生成速度比列表的生成速度快得多。

6.元组的不可变性

元组具有不可变性:创建元组后,不能修改元组的形状,也不能给元组的某个元素重新赋值。不过,这种不可变性不是绝对的。如果元组中的元素本身可变,那么我们可以通过调用该元素的方法来修改元组。

考虑这样的一个元组,其第一个元素是列表:

  1. In [21]: a = ([1, 2], 3, 4)   
  2. In [22]: a   
  3.  
  4. Out[22]: ([1, 2], 3, 4) 

直接用a[0]赋值仍然是不允许的操作,但可以调用a[0]的方法来改变a[0]。

例如,使用.append()方法向a[0]添加新值后,整个元组也发生了改变:

  1. In [23]: a[0].append(5)   
  2. In [24]: a   
  3. Out[24]: ([1, 2, 5], 3, 4)  

7.元组与多变量赋值

Python支持多变量赋值的模式:

  1. In [25]: a, b = 1, 2   
  2. In [26]: a   
  3. Out[26]: 1   
  4. In [27]: b   
  5. Out[27]: 2 

多变量赋值本质是将两个元组中的元素一一对应,这种情况下,Python要求等号两边的元素数目必须相等。例如,将有两个元素的元组 t的值分别赋给 a和 b:

  1. In [28]: t = (1, 2)   
  2. In [29]: a, b = t   
  3. In [30]: a   
  4. Out[30]: 1 

使用多变量赋值,可以轻易地交换a,b的值:

  1. In [32]: a, bb = b, a  # 交换a、b的值   
  2. In [31]: a, b   
  3. Out[31]: (2, 1) 

多变量赋值支持超过两个值的操作,只要等号两边的元素数相同:

  1. In [33]: a, b, c = 1, 2, 3 

多变量赋值还支持嵌套的形式:

  1. In [34]: a, (b, c) = 1, (2, 3)   
  2. In [35]: c   
  3. Out[35]: 3 

除了元组,列表也支持多变量赋值:

  1. In [36]: a, b = [1, 2]   
  2. In [37]: a   
  3. Out[37]: 1 

喜欢的朋友可以添加我们的微信账号:

51CTO读书频道二维码


51CTO读书频道活动讨论群:365934973

【责任编辑:book TEL:(010)68476606】

回书目   上一节   下一节
点赞 0
分享:
大家都在看
猜你喜欢

读 书 +更多

网管员必读—网络基础

本书共分两篇,15章。其中前6章为网络理论基础篇,介绍的是基本的网络技术,包括计算机网络分类、网络通信协议、IP地址和网线制作等。在第...

订阅51CTO邮刊

点击这里查看样刊

订阅51CTO邮刊