我的Python入门笔记(8)

五章、元组


Readability counts.——The Zen of Python


  一、元组概述

  元组(tuple)是Python中另一个比较重要的序列结构,它与列表类似,也是由一系列按特定顺序排列的元素组成,但是它是不可变序列。元组因此也被称为不可变列表。在形式上,元组的所有元素都放在一对“()”中,两个相邻的元素间使用逗号“,”分割。在内容上,可以将整数、实数、字符串、列表、元组等任何类型内容放入元组中,并在同一个元组中,元素的类型可以不同。通常情况下,元组用于保存程序中不可修改的内容。从元组的定义和列表的定义上看,这两种结构比较相似,他们之间的主要区别就是元组是不可变序列,即元组中的元素不可以单独修改。列表是可变序列,列表中的元素可以任意修改。

  二、元组的创建和删除

  1.使用赋值运算符创建元组

  同其他类型的Python变量一样,创建元组时,也可以使用赋值运算符“=”直接将一个元组赋值给变量,其语法格式如下:

  tuplename=(element1,element2,element3,...,enement n)

  tuplename: 元组的名称

  element1,element n:元组中的元素,元组中的元素无个数限制。

1 1 num = (220,284,1210,1184)
2 2 str1= ('元素1','元素二','雨霓同学')
3 3 unit = ('python',1210,('人生苦短,我用Python'))
4 4 print(type(num),type(str1),type(unit))
5 5 输出:
6 6 <class 'tuple'> <class 'tuple'> <class 'tuple'>

  在Python中,虽然元组是使用一对小括号将所有的元素括起来,但实际上,小括号并不是必须的,只需要将一组值用逗号分割开来,Python就可以认为他是元组。

1 In [1]: tuple=1210,1184,'这是测试文字',[220,284]
2 
3 In [2]: type(tuple)
4 Out[2]: tuple

  如果需要创建的元组只包含一个元素,则需要在元素的后面加一个“,”否则将输出一个字符串。示例如下:

1 num = (220,)
2 num2 = ('这是什么')
3 print(type(num),type(num2))
4 输出:
5 <class 'tuple'> <class 'str'>

  2.创建空元组

  在Python中,也可以创建空元组,示例如下:

  emptytuple= ( )   emptytuple:空元组的名称

  空元组可以在为函数传递一个空值或者返回空值。例如,定义一个函数必须传递一个元组类型的值,而我们还不想为它传递一组数据,那么就可以创建一个空元组传递给它。

  3.创建数值元组

  在Python中,可以使用tuple()函数直接将range()函数循环出来的结果转换为数值元组。其语法格式如下:

  tuple(data)   data:可以转换为元组的数据,其类型可以是range对象、字符串、元组或者其他可迭代类型的数据,示例如下: 

1 num = tuple(range(10,20,3))
2 print(type(num),num)
3 输出:
4 <class 'tuple'> (10, 13, 16, 19)

  使用tuple()函数不仅能通过range对象创建元组,还可以通过其他对象创建元组。

  4.删除元组

  对于已经创建的元组,不在使用时,可以使用del语句将其删除,语法格式如下:

  del typlename  tuplename:要删除元组的名称

  del语句在实际开发时,并不常用,因为Python自带的垃圾回收机制会自动销毁不用的元组。

  三、访问元组元素

  在Python中可以使用print()语句直接输出元组的内容,在输出元组时,是包含左右两侧的小括号的,如果不想输出全部元素,也可以通过元组的索引获得指定的元素。在输出单个元素时,不包括小括号,如果是字符串,还不包括左右的引号,此外元组还可以采用切片的方式或者指定的元素。示例如下: 

1 num = (10,'测试文本',3,'人生苦短,我用Python')
2 num2 = num[1]
3 num3= num[:3]
4 print(type(num2),num2,type(num3),num3)
5 输出:
6 <class 'str'> 测试文本 <class 'tuple'> (10, '测试文本', 3)

  四、修改元组元素

  元组时不可变序列,所以不能对它的单个元素进行修改,但是可以对元组进行重新赋值。示例如下:

1 num = (10,'测试文本',3,'人生苦短,我用Python')
2 num = (103,'人生苦短,我用Python')
3 print(num)
4 输出:
5 (103, '人生苦短,我用Python')

  此外,还可以对元组进行连接组合,示例如下:

1 num = (10,'测试文本',3,'人生苦短,我用Python')
2 print('初始元祖:',num)
3 num2 =num+ ('雨霓同学是个沙雕',)
4 print('组合元组:',num2)
5 输出:
6 初始元祖: (10, '测试文本', 3, '人生苦短,我用Python')
7 组合元组: (10, '测试文本', 3, '人生苦短,我用Python', '雨霓同学是个沙雕')

  在进行元组连接时,连接的内容必须都是元组,不能将元组和字符串或者列表进行连接,此外连接的元组只有一个元素时,一定不能忘记后面的元素,否则会报错

  五、元组推导式

  使用元组推导式可以快速生成一个元组,它的表现形式类似于列表推导式,只是将列表推导式中的中括号“[]”改为小括号“()”。例如生成一个包含10个随机数的元组,示例如下:

1 import random   #导入random标准库
2 randomnum = (random.randint(10,100) for i in range(10)) 
3 randomnum2=tuple(randomnum)
4 print("生成的元组为:",randomnum)  #转换为元组
5 print("转换后的元组:",randomnum2)
6 输出:
7 生成的元组为: <generator object <genexpr> at 0x000002051973E228>
8 转换后的元组: (48, 92, 91, 67, 56, 17, 66, 74, 82, 37)

  使用元组推导式生成的结果并不是一个元组或者列表,而是一个生成器对象,这和列表推导式是不同的,需要使用该生成器对象可以将其转换为元组或者列表,转换为列表使用tuple()函数,转换为列表使用list()函数.

  六、元组和列表的区别

  元组和列表都属于序列,而且他们可以按照特定的顺序存放一组元素,类型都不受限制,他们之间的区别主要体现在以下几点:

  1.列表属于可变序列,它的元素可以随时修改或者删除;而元组属于不可变序列,其中元素不可以修改,除非整体替换。

  2.列表可以使用append()、extend()、insert()、remove()和pop()等方法实现添加和修改列表元素,而列表没有这些方法,因为不能向元组中添加和修改元素,同样也不能删除列表元素。

  3.列表可以使用切片访问和修改列表中的元素;元组虽也支持切片,但是它只支持通过切片访问列表元素,不能进行修改。

  4.元组比列表的访问和处理速度快,所以如果只需要对其中的元素进行访问,而不进行修改,建议使用元组。

  5.列表不能作为字典的键,而元组可以.

原文地址:https://www.cnblogs.com/1210x1184/p/11074470.html