元组是 Python 中另一个重要的序列结构,和列表类似,也是由一系列按特定顺序排序的元素组成
元组与列表的区别:
列表可以任意操作元素,是可变序列
元组是不可变序列,即元组中的元素不可以单独修改。
元组用于保存不可修改的内容
Python 提供了多种创建元组的方法,下面一一进行介绍。
= 运算符直接创建元组
例如,下面定义的元组都是合法的:
num = (7,14,21,28,35)
python = ("Python",19,[1,2],('c',2.0))
在 Python 中,元组通常都是使用一对小括号将所有元素括起来的,但小括号不是必须的,只要将各元素用逗号隔开,Python 就会将其视为元组,举个例子:
a_tuple = "我的博客","https://blog.csdn.net/lxd13699"
print(a_tuple)
运行结果为:
('我的博客', 'https://blog.csdn.net/lxd13699')
当创建的元组中只有一个元素时,此元组后面必须要加一个逗号“,”,否则 Python 解释器会将其误认为字符串。例如:
#创建元组 a_typle
a_tuple =("我的博客",)
print(type(a_tuple))
print(a_tuple)
#创建字符串 a
a = ("我的博客")
print(type(a))
print(a)
返回结果如下;
('我的博客',)
我的博客
和列表完全一样,如果想访问元组中的指定元素,可以使用元组中各元素的索引值获取,例如,定义一个包含 3 个元素的元组,若想访问第 2 个元素,可以使用如下的代码:
a_tuple = ('crazyit', 20, -1.2)
print(a_tuple[1])
#运行结果为
20
元组也支持采用切片方式获取指定范围内的元素,例如,访问 a_tuple 元组中前 2 个元组,可以执行如下代码:
a_tuple = ('crazyit', 20, -1.2)
#采用切片方式
print(a_tuple[:2])
#运行结果为:
('crazyit', 20)
前面已经讲过,元组是不可变序列,元组中的元素不可以单独进行修改。但是,元组也不是完全不能修改。
可以对元组进行重新赋值:
a_tuple = ('crazyit', 20, -1.2)
print(a_tuple)
#对元组进行重新赋值
a_tuple = ('https://blog.csdn.net/lxd13699',"我的博客")
print(a_tuple)
运行结果为:
('crazyit', 20, -1.2)
('https://blog.csdn.net/lxd13699', '我的博客')
另外,还可以通过连接多个元组的方式向元组中添加新元素。例如:
a_tuple = ('crazyit', 20, -1.2)
print(a_tuple)
#连接多个元组
a_tuple = a_tuple + ('https://blog.csdn.net/lxd13699',)
print(a_tuple)
结果如下:
('crazyit', 20, -1.2)
('crazyit', 20, -1.2, 'https://blog.csdn.net/lxd13699')
在使用此方式时,元组连接的内容必须都是元组,不能将元组和字符串或列表进行连接,否则或抛出 TypeError 错误。例如:
a_tuple = ('crazyit', 20, -1.2)
#元组连接字符串
a_tuple = a_tuple + 'https://blog.csdn.net/lxd13699'
print(a_tuple)
结果如下:
Traceback (most recent call last):
File "C:\Users\mengma\Desktop\1.py", line 4, in
a_tuple = a_tuple + 'https://blog.csdn.net/lxd13699'
TypeError: can only concatenate tuple (not "str") to tuple
当已经创建的元组确定不再使用时,可以使用 del 语句将其删除,例如:
a_tuple = ('crazyit', 20, -1.2)
print(a_tuple)
#删除a_tuple元组
del(a_tuple)
print(a_tuple)
结果如下:
('crazyit', 20, -1.2)
Traceback (most recent call last):
File "C:\Users\mengma\Desktop\1.py", line 4, in
print(a_tuple)
NameError: name 'a_tuple' is not defined