Python基础-4.元组

TOC

一、元组的基本使用

Python的元组与列表类似,不同之处在于元组的元素不能修改,但是元组可以增加。
元组使用小括号(),列表使用方括号[]
元组创建很简单,只需要在括号中添加元素,并使用逗号隔开即可。

元组的赋值

元组的赋值也是使用=符号进行赋值即可。
【示例】

# 创建空元组
tup0 = ()
# 定义赋值元组
tup1 = ('red', 'green', 'blue', 'yellow', 'black')
tup2 = (1, 2, 3, 4, 5)
tup3 = 'google', 'baidu', 1997, 2023  # 不加括号也行
print('赋值创建元组tup1、tup2、tup3:', tup1, tup2, tup3)

当元组中值包含一个元素的时候需要在元素后面加逗号,,否则括号会被当成是运算符使用。
【示例】

# 元组中只包含一个元素时,需要在元素后面添加逗号 , ,否则括号会被当作运算符使用
tup4 = (10)
tup5 = (10,)
print('tup4:', tup4, '  tup4的类型:', type(tup4))  # 结果为 <class 'int'>
print('tup5:', tup5, '  tup5的类型:', type(tup5))  # 结果为 <class 'tuple'>

元组的取值

定义一个元组供下面示例使用:

tup1 = ('red', 'green', 'blue', 'yellow', 'black')

访问元组的元素的值和列表一样,索引0开始,第二个索引是1,依此类推,反过来最后一个元素的索引为-1,往前一位为-2,以此类推。

print('元组tup1第一位:', tup1[0])
print('元组tup1第二位:', tup1[1])
'''运行结果如下
元组tup1第一位: red
元组tup1第二位: green
'''

元组的切片取值
跟列表一样,元组一样可以通过切片来截取元组的值。
【示例】

# 3-倒数第3的元素
print('获取第3个元素到倒数第3个元素:', tup1[2:-2])
# 4开始后面所有元素
print('获取第4个元素开始后面所有元素:', tup1[3:])
# 倒数第4开始前面所有元素
print('获取倒数第4个元素开始前面所有元素:', tup1[:-3])
'''运行结果如下
获取第3个元素到倒数第3个元素: ('blue',)
获取第4个元素开始后面所有元素: ('yellow', 'black')
获取倒数第4个元素开始前面所有元素: ('red', 'green')
'''

元组可用内置函数

跟列表一样,元组也可以使用一些内置函数。

  • len():计算元组元素个数
  • sorted():对元组进行排序
  • max():列出元组元素最大值
  • min():列出元组元素最小值
  • tuple():将可迭代系列转换为元组

【示例】

tup1 = ('red', 'green', 'blue', 'yellow', 'black')
tup2 = (1, 2, 3, 4, 5)
# 元组长度脚本操作符号使用len()  
print('tup1的长度为:', len(tup1))  
# 列表排序  
print('tup1排序后:', sorted(tup1))  
# 列表中最大最小值  
print('tup2中最大值为:', max(tup2), 'tup2中最小值为:', min(tup2))
'''运行结果如下
tup1的长度为: 5
tup1排序后: ['black', 'blue', 'green', 'red', 'yellow']
tup2中最大值为: 5 tup2中最小值为: 1
'''

二、元组的操作

元组方法

元组函数以及方法和列表基本相同,tuple()将可迭代系列转换为元组
【示例】将列表转化为元组

a = [1, 2, 3, 4]
b = tuple(a)
print('a的类型为:', type(a))  # 结果为 a的类型为: <class 'list'>
print('b的类型为:', type(b))  # 结果为 b的类型为: <class 'tuple'>

增加元素

定义一个元组供下面示例使用:

tup1 = ('red', 'green', 'blue', 'yellow', 'black')

元组中的元素是不允许进行修改的,但是我们可以对元组进行拼接操作对末尾进行追加来实现增加元素。
我们只需要通过使用算术运算符+来增加元素。
【示例】代码如下:

new_tup = tup1 + ('white',)
print('new_tup的值:', new_tup)
'''运行结果如下
new_tup的值: ('red', 'green', 'blue', 'yellow', 'black', 'white')
'''

删除元素

定义一个元组供下面示例使用:

tup2 = (1, 2, 3, 4, 5)

虽然不能对元组的元素进行修改,但是使用del关键字对元组进行删除。删除了之后输出变量会有异常报错信息。
【示例】代码如下:

del tup2
print(tup2)
''' 运行结果如下
Traceback (most recent call last):
  File "/....../test/test.py", line 11, in <module>
    print(tup2)
NameError: name 'tup2' is not defined. Did you mean: 'tup1'?
'''

遍历元组

定义一个元组供下面示例使用:

tup = ('red', 'green', 'blue', 'yellow', 'black')

跟列表一样元组也可以使用for循环配合成员运算符in对列表进行遍历查询元组中的元素。
【示例】代码如下:

num = 1
for i in tup:
    print(f'第{num}个元素的值:', i)
    num += 1
''' 运行结果如下
第1个元素的值: red
第2个元素的值: green
第3个元素的值: blue
第4个元素的值: yellow
第5个元素的值: black
'''

同样我们也可以像列表使用enumerate()函数,通过start=1参数就是计数以1为起点开始计数来遍历输出元组的元素。
【示例】代码如下:

for index, value in enumerate(tup, start=1):
    print(f'第{index}个元素的值:', value)
''' 运行结果如下
第1个元素的值: red
第2个元素的值: green
第3个元素的值: blue
第4个元素的值: yellow
第5个元素的值: black
'''

元组的运算

元组拼接

定义一个元组供下面示例使用:

tup1 = ('red', 'green', 'blue', 'yellow', 'black')
tup2 = (1, 2, 3, 4, 5)

元组的元素是不允许被修改和删除,但是可以连接组合,以及使用del删除。

print('tup1 + tup2结果为:', tup1 + tup2)
'''运行结果如下
tup1 + tup2结果为: ('red', 'green', 'blue', 'yellow', 'black', 1, 2, 3, 4, 5)
'''

元组比较

定义一个元组供下面示例使用:

tup1 = (1, 2, 3, 4, 5)
tup2 = (5, 4, 3, 2, 1)
print('tup1和tup2比较的结果:', tup1 == tup2)  
print('tup1和tup2排序后比较的结果:', sorted(tup1) == sorted(tup2))
''' 运行结果如下
tup1和tup2比较的结果: False
tup1和tup2排序后比较的结果: True
'''

温馨提示:跟列表一样顺序不一样都不能算元组相同,也需要先排序,而且元组存在不同类型的元素变量时不能进行排序。

元组判断

配合成员运算符in判断元素是否存在。
【示例】代码如下:

tup = ('apple', 'banana', 'pear')
if 'banana' in tup:
    print('banana在元组tup中')
else:
    print('banana不在元组tup中')
''' 运行结果如下
banana在元组tup中
'''

元组进阶使用

重新赋值进行覆盖修改元素

所谓元组的不可变指的是元组所指向的内存中的内容不可变,我们可以重新赋值的元组tup,绑定到新的对象了,不是修改了原来的对象。
【示例】代码如下:

tup = ('a', 'b', 'c', 'd')
print('tup的内存地址:', id(tup), 'tup的值:', tup)
tup = ('a', 'e', 'c', 'd')
print('重新赋值后tup的内存地址:', id(tup), '重新赋值后tup的值:', tup)
''' 运行结果如下
tup的内存地址: 4311809248 tup的值: ('a', 'b', 'c', 'd')
重新赋值后tup的内存地址: 4311809088 重新赋值后tup的值: ('a', 'e', 'c', 'd')
'''