![代替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=1738842353-7ViJcnQk5340U1vVY7q05pnVjy81Lyyq-0-656f70570c2edfbcd8785f7729089083)
圆括号可以省略,即:
![](https://epubservercos.yuewen.com/10B311/23020647701664206/epubprivate/OEBPS/Images/046-3.jpg?sign=1738842353-iIMHaJAjredN2PC8Ir34sf8PVcYqOemY-0-2045e7bdbd35dd9eb373825a17d0cdb6)
如果元组只有一个元素,则必须在末尾加逗号。例如:
![](https://epubservercos.yuewen.com/10B311/23020647701664206/epubprivate/OEBPS/Images/046-4.jpg?sign=1738842353-qH6vPRut74KvYj9GEMXQ9NYQCNWlrKjJ-0-d7b43c41a2e6a1e65b6ccd4cf8030eb7)
如果不加逗号,Python会把它作为整数处理。
![](https://epubservercos.yuewen.com/10B311/23020647701664206/epubprivate/OEBPS/Images/046-5.jpg?sign=1738842353-FSV07jtcd8nnOdm1B0Bsw9ykcneGfYxr-0-69bdaca4228a99becb2eb20b1c273b6f)
使用tuple函数,可以将其他可迭代对象转换为元组。其他可迭代对象包括字符串、区间、列表、字典、集合等。其他可迭代对象作为tuple函数的参数给出。
![](https://epubservercos.yuewen.com/10B311/23020647701664206/epubprivate/OEBPS/Images/047-1.jpg?sign=1738842353-dIGSTxFdm6CUtubY34UOGQYwb4tb4Sot-0-d056e6e5d93963bcec8d6879a6d0da32)
使用zip函数,可以将多个列表对应位置的元素组合成元组,并返回zip对象。
![](https://epubservercos.yuewen.com/10B311/23020647701664206/epubprivate/OEBPS/Images/047-2.jpg?sign=1738842353-WtQIWfmSpRGx0V0ItsLTT3gGKBnz4FrA-0-805314ce183b6a1302c9a8a1628c40db)
使用list函数,可以将zip对象转换为列表。
![](https://epubservercos.yuewen.com/10B311/23020647701664206/epubprivate/OEBPS/Images/047-3.jpg?sign=1738842353-NtbViJdVU9Nu9HkP1pcyvHOpuAgoxWrP-0-8af61a77351dd0161f063f65afc167cf)
可见,列表的元素为元组,它们由变量a和b对应位置的元素组合而成。
不能修改或删除元组中的元素,但是可以使用del命令删除整个元组。
![](https://epubservercos.yuewen.com/10B311/23020647701664206/epubprivate/OEBPS/Images/047-4.jpg?sign=1738842353-p6LmykDIDhAfTf83ovJHeEsT0zc5tgOR-0-367effebaf5f299868747e186c435f1c)
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=1738842353-cY8daBLLI9RpXjeaOmYnBhM6W84ap74O-0-8db68f93d3b59096f7ae5ef0d4147fec)
也可以使用元组对象的index方法返回指定元素在元组中第1次出现的位置,位置索引号的基数为0。下面的代码返回元素3在元组中第1次出现的位置。
![](https://epubservercos.yuewen.com/10B311/23020647701664206/epubprivate/OEBPS/Images/048-2.jpg?sign=1738842353-B5dqW6hPgDdw5rkEU061rkrp4GWtnz4k-0-76193ccb61f2ed790158a47e79682cc2)
该方法还可以有第2个参数和第3个参数,指定取值范围的起点和终点。当省略终点时,终点取最后1个元素。下面的代码返回在元组第4个元素到末尾这个范围内元素3第1次出现的位置。
![](https://epubservercos.yuewen.com/10B311/23020647701664206/epubprivate/OEBPS/Images/048-3.jpg?sign=1738842353-zEVIyE7XjL3ludtfAAHlHroK5AhITCWv-0-1c590818537e87116c18d26ea27e14d0)
切片操作规则也跟列表的相同,有正向和反向之分,请参阅1.5.3节的内容。
![](https://epubservercos.yuewen.com/10B311/23020647701664206/epubprivate/OEBPS/Images/048-4.jpg?sign=1738842353-aEHnZHIFuWGab7PXykMjRzuJztpHCfbU-0-ff1cddf001bf9ce6e51b89f1dea6253f)
注意:无法修改和删除元组中元素的值。例如,下面的代码试图将元组t中的第2个元素的值改为3时,给出出错信息。
![](https://epubservercos.yuewen.com/10B311/23020647701664206/epubprivate/OEBPS/Images/048-5.jpg?sign=1738842353-TIco1cF43PieInT2qcAnfzkgZs7O2If0-0-f3feb50a0c467a2837a93519dad120b8)
1.6.3 基本运算和操作
使用运算符对指定元组进行操作。下面使用+(加号)连接两个元组。
![](https://epubservercos.yuewen.com/10B311/23020647701664206/epubprivate/OEBPS/Images/049-1.jpg?sign=1738842353-WSB9xtL1wcuhzxzxi3DbZqgO38jZmSdv-0-65f71d1bff5da760257131dee4c570c7)
使用*(乘号)重复扩展给定元组。
![](https://epubservercos.yuewen.com/10B311/23020647701664206/epubprivate/OEBPS/Images/049-2.jpg?sign=1738842353-JwUsbkpNfi3XUN46gm9hlJ4iRdgO5aRO-0-60bdd37343b60998686e0dc59c4dffc4)
使用in或not in判断元组中是否包含或不包含指定元素,如果是则返回True,否则返回False。
![](https://epubservercos.yuewen.com/10B311/23020647701664206/epubprivate/OEBPS/Images/049-3.jpg?sign=1738842353-TCC3mEc8MpzAgVp45Y4bCZMXe8DoUva2-0-a26cd51a1ff26a914dc8f7287c5a0d48)
使用len函数计算元组的长度,即元组中元素的个数。
![](https://epubservercos.yuewen.com/10B311/23020647701664206/epubprivate/OEBPS/Images/049-4.jpg?sign=1738842353-dT8B6yTlThErMjoteYX3sEe9XIAIQJoB-0-a59a79ba86729ff45ab0490ee6d8ed91)
使用max函数和min函数返回元组中最大的元素和最小的元素。
![](https://epubservercos.yuewen.com/10B311/23020647701664206/epubprivate/OEBPS/Images/049-5.jpg?sign=1738842353-0idjaozVaRBhIuLC4r8Q5mk0XUXhcnhs-0-77fb1714e96aef18b99660ced7d9a05c)