一、元组的定义

元组名 = ( 元素1 , 元素2 , ... ... )

#当定义一个tuple时,在定义的时候,tuple的元素就必须被确定下来
>>> tup1 = ('Google', 'Runoob', 1997, 2000)
  • Python 的元组与列表类似,不同之处在于元组的元素一旦初始化就不能修改 ( 因此元组又称为只读列表 )。不可变的tuple有什么意义?因为tuple不可变,所以代码更安全。如果可能,能用tuple代替list就尽量用tuple。
  • 元组使用小括号 ( ),列表使用方括号 [ ]。
  • 元组中只包含一个元素时,需要在元素后面添加逗号,否则括号会被当作运算符使用。
>>> tup1=()
>>> type(tup1)   #创建空元组
<class 'tuple'>

>>> tup2=(50)
>>> type(tup2)   #不加逗号,类型为整型
<class 'int'>

>>> tup3=(50,)   #加上逗号,类型为元组
>>> type(tup3)
<class 'tuple'>
  • 在Python中,很多人认为元组创建需要使用(),其实不然,真正决定元组的形式是逗号。
>>> tup='a','b',1,2
>>> type(tup)
<class 'tuple'>

二、元组的基本操作

元组与字符串类似,下标索引从0开始,可以进行截取,组合等。

1、访问元组

元组可以使用下标索引来访问元组中的值,如下实例:

tup1 = ('Google', 'Runoob', 1997, 2000)
tup2 = (1, 2, 3, 4, 5, 6, 7 )
 
print ("tup1[0]: ", tup1[0])     #读取元组tup1中的第一个元素
print ("tup2[1:5]: ", tup2[1:5]) #截取元素,从tup2中的第二个到第五个元素

运行结果:
tup1[0]:  Google
tup2[1:5]:  (2, 3, 4, 5)

2、修改元组

元组中的元素值是不允许修改的,但我们可以对元组进行连接组合,如下实例:

tup1 = (12, 34.56);
tup2 = ('abc', 'xyz')
 
# tup1[0] = 100      这样修改元组元素操作是非法的,会报错(TypeError: 'tuple' object does not support item assignment)

# 创建一个新的元组:两个元组连接起来
tup3 = tup1 + tup2   
print (tup3)

运行结果:
(12, 34.56, 'abc', 'xyz')

3、删除元组

元组中的元素值是不允许删除的,但我们可以使用del语句来删除整个元组,如下实例:

tup = ('Google', 'Runoob', 1997, 2000)
print (tup)

del(tup)        #删除元组tup
print ("删除后的元组 tup : ")
print (tup)

运行结果:
('Google', 'Runoob', 1997, 2000)
删除后的元组 tup :
Traceback (most recent call last):
  File "D:\st13\python\1.11\lx.py", line 6, in <module>
    print (tup)
NameError: name 'tup' is not defined

4、元组运算符

与字符串一样,元组之间可以使用 + 号和 * 号进行运算。这就意味着他们可以组合和复制,运算后会生成一个新的元组。

len((1, 2, 3))

3

计算元素个数

(1, 2, 3) + (4, 5, 6)

(1, 2, 3, 4, 5, 6)

连接

('Hi!',) * 4

('Hi!', 'Hi!', 'Hi!', 'Hi!')

复制

3 in (1, 2, 3)

True

元素是否存在

for x in (1, 2, 3):

     print (x)

1

2

3

迭代

5、元组索引,截取

因为元组也是一个序列,所以我们可以访问元组中的指定位置的元素,也可以截取索引中的一段元素,如下所示:

>>> tup1 = ('Google', 'Runoob', 1997, 2000)
>>> tup1[2]          #读取第三个元素
1997
>>> tup1[-1]         #反向读取,读取倒数第一个元素
2000
>>> tup1[1:]         #截取元素,从第二个开始后的所有元素。
('Runoob', 1997, 2000)

5、元组内置函数

5.1> len(tuple) :计算元组元素个数

>>> tup1 = ('Google', 'Runoob', 1997, 2000)
>>> len(tup1)
4

5.2> max(tuple) :返回元组中元素最大值

>>> tup2=(5,4,6,1,9)  #元素必须为同一类型的数据类型
>>> max(tup2)
9

>>> tup3=('9','3','2','0')
>>> max(tup3)
'9'

5.3> min(tuple) :返回元组中元素最小值

>>> tup1=(5,4,6,1,9)
>>> min(tup1)
1

>>> tup2=('9','3','2','0')
>>> min(tup2)
'0'

5.4> tuple(seq) :将列表转换为元组

>>> list1 = ['Google', 'Runoob', 1997, 2000]
>>> tup1=tuple(list1)
>>> print(tup1,type(tup1))
('Google', 'Runoob', 1997, 2000) <class 'tuple'>

5.5> sum(tuple) :求元组中的元素之和

>>> tup1=(2,4,3,6,7)  #元组中的元素必须全部为int或float类型
>>> sum(tup1)
22

6、元组的方法(元组没有列表中的增、删、改的操作,只有查的操作)

6.1> tuple.index(obj):从元组中找出某个值第一个匹配项的索引值

>>> tup1=(1,2,3,5,6,2)
>>> tup1.index(2)    #2出现了两次,只返回第一个匹配项的索引值
1

6.2> tuple.count(obj): 统计某个元素在元组中出现的次数

>>> tup1=(1,2,3,5,6,2,5,8,3,2,7)
>>> tup1.count(2)   #统计2出现的次数
3

三、元组的使用实例

下面的代码是判断输入的日期是当年的第几天。将闰年和平年每月的天数分别存入元组tup1、tup2,然后判断查询的年份是平年还是闰年,分别计算天数即可。

year=int(input("请输入需要查询的年:"))
month=int(input("请输入需要查询的月:"))
day=int(input("请输入需要查询的天:"))
tup1=(31,29,31,30,31,30,31,31,30,31,30,31)   #闰年
tup2=(31,28,31,30,31,30,31,31,30,31,30,31)   #平年

if year%400==0 or (year%4==0 and year%100!=0):  #闰年
    days=sum(tup1[:month-1])
    fin=days+day
    print(month,"月",day,"日是",year,"年的第",fin,"天")
else:
    days=sum(tup2[:month-1])
    fin=days+day
    print(month,"月",day,"日是",year,"年的第",fin,"天")

运行结果:
请输入需要查询的年:2019
请输入需要查询的月:12
请输入需要查询的天:31
12 月 31 日是 2019 年的第 365 天