![代替VBA!用Python轻松实现Excel编程](https://wfqqreader-1252317822.image.myqcloud.com/cover/254/43738254/b_43738254.jpg)
1.6 元组
元组和列表很像,只是它在定义好以后,不能修改里面的数据。元组用圆括号“()”表示。在创建元组以后,可以对它进行索引、切片和各种运算。这部分内容和列表的基本一样。
1.6.1 元组的创建和删除
使用()、tuple函数和zip函数等创建元组。下面使用“()”创建元组,元组的元素可以是不同类型的数据。
![](https://epubservercos.yuewen.com/10B311/23020647701664206/epubprivate/OEBPS/Images/046-2.jpg?sign=1739277710-DEbOZZk0F7YZNOTNshWYsVHCBlgDUKfA-0-1c3cfc37f47659f6e8c5e07bda6a04c5)
圆括号可以省略,即:
![](https://epubservercos.yuewen.com/10B311/23020647701664206/epubprivate/OEBPS/Images/046-3.jpg?sign=1739277710-zprTVGKlFw6q6CK86VmEWtpoGAQ0xX68-0-280d37c88909c46b5944feefb3c262e6)
如果元组只有一个元素,则必须在末尾加逗号。例如:
![](https://epubservercos.yuewen.com/10B311/23020647701664206/epubprivate/OEBPS/Images/046-4.jpg?sign=1739277710-TTyyIAUaadAUkh79smVBdMkFHZR6wxG6-0-6bcc8bd845bac60cde8a581850f58702)
如果不加逗号,Python会把它作为整数处理。
![](https://epubservercos.yuewen.com/10B311/23020647701664206/epubprivate/OEBPS/Images/046-5.jpg?sign=1739277710-rTvqU6eWk4UFxb9LvzkarJy1r7mUfOML-0-521ed36438fe5e86ac59b0819d11cd13)
使用tuple函数,可以将其他可迭代对象转换为元组。其他可迭代对象包括字符串、区间、列表、字典、集合等。其他可迭代对象作为tuple函数的参数给出。
![](https://epubservercos.yuewen.com/10B311/23020647701664206/epubprivate/OEBPS/Images/047-1.jpg?sign=1739277710-LHdw3kDvE5gauNAXb4wAu1Ky9We8TxWJ-0-75bba96b82b74ccb66283ebb0d5e311d)
使用zip函数,可以将多个列表对应位置的元素组合成元组,并返回zip对象。
![](https://epubservercos.yuewen.com/10B311/23020647701664206/epubprivate/OEBPS/Images/047-2.jpg?sign=1739277710-2t9edx3D9o74CxNjnjs90C8fS5dvdnCl-0-b0dc1e2dc5e5612ab9030c692c3de7c4)
使用list函数,可以将zip对象转换为列表。
![](https://epubservercos.yuewen.com/10B311/23020647701664206/epubprivate/OEBPS/Images/047-3.jpg?sign=1739277710-mwvGXvOmgR4iJlmvUfgdcEhXJrH8UE2x-0-fb815e5015c0bebb1998ea3ccb79ad48)
可见,列表的元素为元组,它们由变量a和b对应位置的元素组合而成。
不能修改或删除元组中的元素,但是可以使用del命令删除整个元组。
![](https://epubservercos.yuewen.com/10B311/23020647701664206/epubprivate/OEBPS/Images/047-4.jpg?sign=1739277710-JyiTMVlsR9FvEk0nMLvv3c6vipBPe1Q8-0-2f575859e595a3a63049dd29585247cd)
1.6.2 索引和切片
元组的索引和切片操作跟列表的相同,可以参阅1.5.3节的内容。与列表不同的是,通过索引和切片将元组中的单个或多个元素提取出来以后,不能修改它们的值。
下面创建一个元组,通过索引提取第1个元素和最后1个元素的数据。这里用到正向提取和反向提取,在正向提取时基数为0,在反向提取时从右向左计数,基数为-1,比如倒数第2个元素的索引号就是-2。
![](https://epubservercos.yuewen.com/10B311/23020647701664206/epubprivate/OEBPS/Images/047-5.jpg?sign=1739277710-ENiTDjCnTCbCyBoB3bXqBbKllqRErDgk-0-b2ca8488457c6bf108bf301d987a1cbc)
也可以使用元组对象的index方法返回指定元素在元组中第1次出现的位置,位置索引号的基数为0。下面的代码返回元素3在元组中第1次出现的位置。
![](https://epubservercos.yuewen.com/10B311/23020647701664206/epubprivate/OEBPS/Images/048-2.jpg?sign=1739277710-4ie8obKcQTOR0r5uNvn5BEul0Kj9SUgQ-0-71ed9863a58c57ea5063aa205ab56576)
该方法还可以有第2个参数和第3个参数,指定取值范围的起点和终点。当省略终点时,终点取最后1个元素。下面的代码返回在元组第4个元素到末尾这个范围内元素3第1次出现的位置。
![](https://epubservercos.yuewen.com/10B311/23020647701664206/epubprivate/OEBPS/Images/048-3.jpg?sign=1739277710-RqN2Sn7TF8YddNRvbcwTHvrE44i5Qdb0-0-8c4eac08d14bd7ae928476b20e616f95)
切片操作规则也跟列表的相同,有正向和反向之分,请参阅1.5.3节的内容。
![](https://epubservercos.yuewen.com/10B311/23020647701664206/epubprivate/OEBPS/Images/048-4.jpg?sign=1739277710-v5EMWpvlHXLm4cWQRiirizlvhXDe6WZD-0-a5e82a8d4a08ee0d9534b5a71f0f63b0)
注意:无法修改和删除元组中元素的值。例如,下面的代码试图将元组t中的第2个元素的值改为3时,给出出错信息。
![](https://epubservercos.yuewen.com/10B311/23020647701664206/epubprivate/OEBPS/Images/048-5.jpg?sign=1739277710-7OaJN0gQ5LjbGJoFvU8fEz5Hd9N2L1J4-0-b6667b578626277a0a932bd4cfd20a81)
1.6.3 基本运算和操作
使用运算符对指定元组进行操作。下面使用+(加号)连接两个元组。
![](https://epubservercos.yuewen.com/10B311/23020647701664206/epubprivate/OEBPS/Images/049-1.jpg?sign=1739277710-TCX2mFI6tddpZitxA3tVjbuimb7i1aIm-0-1c68d28781857f9d5bae505196ed798e)
使用*(乘号)重复扩展给定元组。
![](https://epubservercos.yuewen.com/10B311/23020647701664206/epubprivate/OEBPS/Images/049-2.jpg?sign=1739277710-obm1lyL6tL73VqSj1yY11qgdIS4SFuN0-0-1d7f80a3a65925da88f4534667c05196)
使用in或not in判断元组中是否包含或不包含指定元素,如果是则返回True,否则返回False。
![](https://epubservercos.yuewen.com/10B311/23020647701664206/epubprivate/OEBPS/Images/049-3.jpg?sign=1739277710-gmGO4TUubsgFuxH25dVjLxPYWxe3zCIx-0-01a10ffd243a4d512336447fd1a0b7e0)
使用len函数计算元组的长度,即元组中元素的个数。
![](https://epubservercos.yuewen.com/10B311/23020647701664206/epubprivate/OEBPS/Images/049-4.jpg?sign=1739277710-n1IAXU2wMoiwRsyFzD94dJKW9nDzm6c1-0-b367085aa28c055b667ab377bcf7973e)
使用max函数和min函数返回元组中最大的元素和最小的元素。
![](https://epubservercos.yuewen.com/10B311/23020647701664206/epubprivate/OEBPS/Images/049-5.jpg?sign=1739277710-poBGLAW1YOjhroKLA6bUAl71DDgUwE07-0-82e4480cd1d14264f00ae10a5c0d1d7e)