![代替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=1738887563-eNJk4CQXNs7Zer5nSVEWNsW8oo65Spc7-0-27ae9012d401f1c5c48c2ef8c9b63576)
圆括号可以省略,即:
![](https://epubservercos.yuewen.com/10B311/23020647701664206/epubprivate/OEBPS/Images/046-3.jpg?sign=1738887563-AOSYLL7Gxx5DTtAtZuwqYZ048htGlLiM-0-0aa97dd1f9e187cd271931d92a1381e7)
如果元组只有一个元素,则必须在末尾加逗号。例如:
![](https://epubservercos.yuewen.com/10B311/23020647701664206/epubprivate/OEBPS/Images/046-4.jpg?sign=1738887563-0GF0TcP7Mh48QziR1enBZG5jNS8dZSTV-0-38094512bd7326c22b794b21c74dcf3d)
如果不加逗号,Python会把它作为整数处理。
![](https://epubservercos.yuewen.com/10B311/23020647701664206/epubprivate/OEBPS/Images/046-5.jpg?sign=1738887563-RWYwdUfyjX1N1kEQm2kblEx5RFUexmOu-0-fc014fba3dd35f5ac332634511d05854)
使用tuple函数,可以将其他可迭代对象转换为元组。其他可迭代对象包括字符串、区间、列表、字典、集合等。其他可迭代对象作为tuple函数的参数给出。
![](https://epubservercos.yuewen.com/10B311/23020647701664206/epubprivate/OEBPS/Images/047-1.jpg?sign=1738887563-H7GZCiMxVrJQ4SqykytUsDeH6z4OPliJ-0-ba62982b39b8bec7000247136b365715)
使用zip函数,可以将多个列表对应位置的元素组合成元组,并返回zip对象。
![](https://epubservercos.yuewen.com/10B311/23020647701664206/epubprivate/OEBPS/Images/047-2.jpg?sign=1738887563-0sbeypkxvNMikM47ro78gduj77P81w4k-0-d5b634afd1e9c9857eb6a2d5cdff4467)
使用list函数,可以将zip对象转换为列表。
![](https://epubservercos.yuewen.com/10B311/23020647701664206/epubprivate/OEBPS/Images/047-3.jpg?sign=1738887563-HtIfmwtIV8dWyJGI0XOojBxN0sfmyJnS-0-b720eb84fd3f0bf99fec21398a33bb5b)
可见,列表的元素为元组,它们由变量a和b对应位置的元素组合而成。
不能修改或删除元组中的元素,但是可以使用del命令删除整个元组。
![](https://epubservercos.yuewen.com/10B311/23020647701664206/epubprivate/OEBPS/Images/047-4.jpg?sign=1738887563-D1CwtpRDOW3QW68L1oqe3ElOpU8Dss7P-0-a9ffb05fea9b651d841116a30b20e01b)
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=1738887563-e07ncp5Qpy4DUjUJIAxSZls7OgDDRWnT-0-b5327dcdd47bd7b5e9c119a6c603b76f)
也可以使用元组对象的index方法返回指定元素在元组中第1次出现的位置,位置索引号的基数为0。下面的代码返回元素3在元组中第1次出现的位置。
![](https://epubservercos.yuewen.com/10B311/23020647701664206/epubprivate/OEBPS/Images/048-2.jpg?sign=1738887563-U4jori53gPHOu1gWKsegfapdiPRbx31l-0-4fe8a4dd7acb4130d872a17e29c29313)
该方法还可以有第2个参数和第3个参数,指定取值范围的起点和终点。当省略终点时,终点取最后1个元素。下面的代码返回在元组第4个元素到末尾这个范围内元素3第1次出现的位置。
![](https://epubservercos.yuewen.com/10B311/23020647701664206/epubprivate/OEBPS/Images/048-3.jpg?sign=1738887563-wgtQlOPo6gaSJZp5I8yMwVnEQhRSCASE-0-07dace3df6391a216dadece0919f5cd4)
切片操作规则也跟列表的相同,有正向和反向之分,请参阅1.5.3节的内容。
![](https://epubservercos.yuewen.com/10B311/23020647701664206/epubprivate/OEBPS/Images/048-4.jpg?sign=1738887563-D1LQWvbGdXjZtXdrXzq6rG6yfVrWrHl7-0-92f4d31dd9d2e9ab8c98f51196ba4f64)
注意:无法修改和删除元组中元素的值。例如,下面的代码试图将元组t中的第2个元素的值改为3时,给出出错信息。
![](https://epubservercos.yuewen.com/10B311/23020647701664206/epubprivate/OEBPS/Images/048-5.jpg?sign=1738887563-FlkkNCp0vapsEGNKhuvkMyamza6KzqwD-0-7f5d104543234a32a6e5d92ae6f7fc54)
1.6.3 基本运算和操作
使用运算符对指定元组进行操作。下面使用+(加号)连接两个元组。
![](https://epubservercos.yuewen.com/10B311/23020647701664206/epubprivate/OEBPS/Images/049-1.jpg?sign=1738887563-5vEPuIifGRrx7988GrU2ra5wJbzdNWKt-0-eb2570c4a617b8148b8e575a2b8594df)
使用*(乘号)重复扩展给定元组。
![](https://epubservercos.yuewen.com/10B311/23020647701664206/epubprivate/OEBPS/Images/049-2.jpg?sign=1738887563-FL3MslzKEANOlLL3ozuALfuwww6Uns1L-0-76a3dd06fe14dd3dc7abb5ae85b921cf)
使用in或not in判断元组中是否包含或不包含指定元素,如果是则返回True,否则返回False。
![](https://epubservercos.yuewen.com/10B311/23020647701664206/epubprivate/OEBPS/Images/049-3.jpg?sign=1738887563-ER5MkY8nUVdIVupqOgkOOaCf2isTV03O-0-fabfa5cf074b2ddddebe9621e675868b)
使用len函数计算元组的长度,即元组中元素的个数。
![](https://epubservercos.yuewen.com/10B311/23020647701664206/epubprivate/OEBPS/Images/049-4.jpg?sign=1738887563-W15Xfyv1qxXORQF3IH7u0UUhcQgL1wdP-0-8e2e57b484e17703f7eea56a9c5bc889)
使用max函数和min函数返回元组中最大的元素和最小的元素。
![](https://epubservercos.yuewen.com/10B311/23020647701664206/epubprivate/OEBPS/Images/049-5.jpg?sign=1738887563-h8UA7AqAOb7bIv3NuqPuMLMjAVVbkSyD-0-996233bfac59a8961476b8827b036c42)