在 Python 中,元组由内置的 tuple 类型定义。
Python 的元组与列表类似,不同之处在于元组的元素不能修改。
一. 创建元组
- 元组使用小括号,列表使用方括号。
- 元组创建很简单,只需要在括号中添加元素,并使用逗号隔开即可。
- 如果你使用逗号分隔了一些值,就会自动创建元组。
- 创建包含一个值的元组,必须在括号中的元素家一个逗号。
>>> 1,2,3
(1, 2, 3)
>>> tup = 1, 5.5, 'Python' # 创建元组时可以没有括号,也称为元组包装
>>> tup
(1, 5.5, 'Python')
>>> tup = () #创建空元组
>>> tup
()
>>> tup = ('P', 'y', 't', 'h', 'o', 'n') # 字符串类型元组
>>> tup
('P', 'y', 't', 'h', 'o', 'n')
>>> tup = (1, 5.5, 'Python') # 混合类型元组
>>> tup
(1, 5.5, 'Python')
>>> tup = (6, 'Python', ('P', 'y', 't', 'h', 'o', 'n')) # 嵌套元组
>>> tup
(6, 'Python', ('P', 'y', 't', 'h', 'o', 'n'))
>>> a, b, c = tup # 元组解包
>>> a
6
>>> b
'Python'
>>> c
('P', 'y', 't', 'h', 'o', 'n')
>>> ##########创建包含一个元素的元组#########
...
>>> tup = ('Python') # 只有括号
>>> tup
'Python'
>>> type(tup)
<class 'str'>
>>> tup = ('Python',) # 在元素后面添加逗号
>>> tup
('Python',)
>>> type(tup)
<class 'tuple'>
二. tuple 函数
tuple 函数的功能和 list 函数基本一样,都是以一个序列作为参数,并把它转换为元组。如果参数是元组,参数就会被原样返回。
>>> tuple(['Hello','World'])
('Hello', 'World')
>>> tuple('hello')
('h', 'e', 'l', 'l', 'o')
>>> tuple('hello',)
('h', 'e', 'l', 'l', 'o')
>>> tuple(('Hello', 'World')) #参数是元组
('Hello', 'World')
三. 元组的基本操作
1. 访问元组
元组可以使用下标索引来访问元组中的值。
>>> tup = ('P', 'y', 't', 'h', 'o', 'n')
>>> tup[0] #访问第 1 个元素
'P'
>>> tup[-2] #访问倒数第 2 个元素(反向索引)
'o'
>>> tup[1:4] #访问第 2 个到第 4 个元素
('y', 't', 'h')
>>>
>>> tup[:-3] #从开始到倒数第 3 个元素
('P', 'y', 't')
>>> tup = (6, 'Python', ('P', 'y', 't', 'h', 'o', 'n')) # 嵌套元组
>>>
>>> tup[2][3] #嵌套索引
'h'
2. 修改元组
元组中的元素值是不允许修改的,但我们可以对元组进行连接组合。
元组是不可变的,但是如果元素本身是一个可变数据类型的列表,那么其嵌套项可以被改变。
>>> tup0 = ('Hello','World')
>>> tup1 =(1,2,3)
>>> tup3 = tup0 + tup1 #创建一个新元组
>>> print(tup3)
('Hello', 'World', 1, 2, 3)
>>>
>>>
>>> tup = (6, 'Python', ['P', 'y', 't', 'h', 'o', 'n'])
>>> tup[0] = 5 #不能改变元素
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'tuple' object does not support item assignment
>>>
>>> tup[2][2] = 's' #嵌套项可以被改变
>>> print(tup)
(6, 'Python', ['P', 'y', 's', 'h', 'o', 'n'])
3. 删除元组
元组中的元素值是不允许删除的,但可以使用 del 语句来删除整个元组。
>>> tup = ('P', 'y', 't', 'h', 'o', 'n')
>>>
>>> del tup[0]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'tuple' object doesn't support item deletion
>>>
>>> del tup #删除整个元组
>>> tup
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'tup' is not defined
4. 元组运算符
与字符串一样,元组之间可以使用 + 号和 * 号进行运算。这就意味着他们可以组合和复制,运算后会生成一个新的元组。
Python 表达式 | 结果 | 描述 |
---|---|---|
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. 元组索引,截取
因为元组也是一个序列,所以可以访问元组中的指定位置的元素,也可以截取索引中的一段元素。
>>> tup =(1,2,3)
>>> tup[2] #读取第三个元素
3
>>> tup[-2] #反向读取;读取倒数第二个元素
2
>>> tup[1:] #截取元素,从第二个开始后的所有元素
(2, 3)
四. 元组内置函数
1. 元组的方法
通过 dir() 来查看方法列表:
>>> dir(tuple)
['__add__', '__class__', '__contains__', '__delattr__', '__dir__', '__doc__', '__eq__',
'__format__', '__ge__', '__getattribute__', '__getitem__', '__getnewargs__', '__gt__',
'__hash__', '__init__', '__init_subclass__', '__iter__', '__le__', '__len__', '__lt__',
'__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__rmul__',
'__setattr__', '__sizeof__', '__str__', '__subclasshook__', 'count', 'index']
方法 | 描述 |
---|---|
index() | 返回第一个匹配项的索引 |
count() | 统计某个元素在列表中出现的次数 |
>>> tup = ('P', 'y', 't', 'h', 'o', 'n')
>>>
>>> tup.index('y') # 返回第一个匹配 'y' 的索引
1
>>> tup.count('h') ## 统计 'h' 在元组中出现的次数
1
2. 元组内置函数
函数 | 描述 |
---|---|
all() | 如果元组中的所有元素都是 True(或者元组为空),则返回 True。 |
any() | 如果元组中的所有元素都是 True,则返回 True;如果元组为空,则返回 False。 |
enumerate() | 返回一个枚举对象,其中包含了元组中所有元素的索引和值(配对)。 |
len() | 返回元组的长度(元素个数) |
max() | 返回元组中的最大项 |
min() | 返回元组中的最小项 |
sorted() | 返回一个新的排序元组(不排序元组本身) |
sum() | 返回元组的所有元素之和 |
tuple() | 将 iterable(字符串、列表、集合、字典)转换为元组 |
>>> tup = ('P', 'y', 't', 'h', 'o', 'n')
>>> len(tup)
6
>>> max(tup)
'y'
>>> min(tup)
'P'
>>> list = ['P', 'y', 't', 'h', 'o', 'n']
>>> list
['P', 'y', 't', 'h', 'o', 'n']
>>> tup = tuple(list)
>>> tup
('P', 'y', 't', 'h', 'o', 'n')
>>> sorted(tup)
['P', 'h', 'n', 'o', 't', 'y']
>>> sum(tup)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: unsupported operand type(s) for +: 'int' and 'str'