python序列之元组
元组是Python中另一个重要的序列结构,与列表类似,但它是不可变序列,因此,元组也成为不可变列表,元组中所有元素都放在”()”中,两个相邻之间元素通过逗号分隔,在内容上,可以将整数、实数、字符串、列表、元组等任何类型的内容放入元组中,在同一元组中,元素的类型可以不同,通常情况下元组用于保存程序中不可修改的内容。
注意:元组和列表结构比较相似,区别是列表可以修改,元组不可修改。
一、元组的创建和删除
1、使用赋值运算符直接创建元组:将元组赋值给变量,语法格式如下:
tuplename = (元素1,元素2,元素3……元素n)
上述tuplename表示元组的名字,后面的表示元组中的元素,元素之间使用逗号分隔。
Python中,元组一般是用小括号括起来,但不是必须的,只要将一组值通过逗号分隔开,python也可以将其视为元祖,如图:

如果要创建的元组只包含一个元素,那么在创建的时候需要在元素后面加上一个逗号,如图:

在 python中可以通过type()函数来测试变量的类型,如图:

2、创建空元组:
例如:创建一个空元组可以使用命令如下:
emptytuple = ()
空元组可以用于为函数传递一个空值或者返回一个空值,例如,定义一个函数必须传递元组类型的空值,如果不想传递数据给他,此时可以传递一个空元组。
3、创建数值元组:
在python中,可以直接通过tuple()函数将range()循环出来的结果转换为数值元组。
例如:创建一个10到20之间的偶数数值元组,执行命令如图:

4、删除元祖:
对于不使用的元组,可以通过del命令删除,语法格式如下:
del tuplename
注意:在实际开发中,del语句并不常用,因为python自带的垃圾回收机制会自动销毁不用的元组,因此即使不手动删除,python也会自动删除。
二、访问元组中的元素
python中,打印元组中元素可以直接通过print()打印即可,打印结果中是包括小括号的,如图:

获取元素的时候,也可以通过索引以及切片的形式来打印元素,如图:

还可以通过for循环来遍历元组,与列表类似,如图:

在元组中,还可以使用for循环和enumerate()结合进行遍历,如图:

注意:enumerate()函数用于将一个可遍历的数组对象(元组或列表)结合为一个索引序列,同时列出数据和数据下标(索引),一般在for循环中使用。
也可以直接通过解包元组的方式来使用元组,如图:

注:等号左侧的元素数量要与元组中的元素数量相当,否则报错

即使包含嵌套元组的序列也会被解包,如图:


如果要摘取元组的前面几个元素,可以使用*rest功能,这个rest是自定义的,写*abc也可以,如图:


注:*rest表示要舍弃的部分,名字可自定义,写成 *_ 也可以的
统计元组中某个元素出现的次数,也适用列表,使用count(),如图:


三、修改元组中的元素
元组是不可变序列,我们不能对其单个值进行修改,但是可以通过重新赋值的方式来修改元组,例如:

另外还可以通过对元组进行连接组合,将两个元祖进行连接,从而实现在原来元组中添加新元素,如图:

注意:在进行元组连接的时候,连接的内容必须都是元祖,不能将元组与列表、字符串等进行连接。
使用元组链接的时候,如果后面元组只有一个元素,那么此元素后一定不能缺少逗号,不加逗号表示字符串,加了逗号才是元组,如图:

虽然元组作为一个整体不可进行修改,但是元组中的列表元素是可以被修改的,如图:


四、元组推导式
元组推导式可以快速生成一个元组,和列表推导式一样,只是将列表推导式中的”[]”换成”()”
例如:生成一个包含10个随机数的元组,执行命令如图:

执行结果如下图所示:

从执行结果可以看出,结果不是一个元组或列表,而是一个生成器对象,这一点和列表不同,可通过该生成器对象转换为元组 或列表,转换元组使用tuple()函数,转换列表使用list()函数。
通过生成器对象转换为元组,执行命令如图:

元组和列表的区别:
1、列表属于可变序列,元素可以随时修改和删除,元组属于不可变序列,元素不支持修改和删除,除非整体替换。
2、列表可以使用append()、insert()、remove()、extend()、pop()等方法实现添加和修改元素,但是元组不支持这几个方法,无法修改和添加以及删除元素。
3、列表可以使用切片访问和修改其中的元素,元组也支持切片,但是只支持访问,不支持修改。
4、元组比列表的访问和处理速度要快,因此如果只需要访问元素,不需要修改元素的情况下建议使用元组。
5、列表不能作为字典的键,而元组可以。


