元组简单介绍
- 元组是一个和列表和相似的数据类型,也是一个有序序列
- 两者拥有着基本相同的特性,但是也有很多不同的地方
声明元组
var = (1, 2, 3) var = ("1", "2", "3") var = (True, False) var = (1.1, 1.11, 1.111) var = ((1,), (2, 3), (4, 5)) var = ([1, 2], {"name": "polo"})
元组与列表的区别
元组与列表很相似,都是有序的只读序列,两者有相同的方法和操作运算,区别在于:
- 列表创建后,可以进行修改
- 元组创建后,不能进行修改
lis = [1, 2, 3] lis[0] = 111 print(lis) tupl = (1, 2, 3) tupl[0] = 2 # 输出结果 Traceback (most recent call last): File "/Users/polo/Documents/pylearn/第一章:python 基本类型/6_tuple元组.py", line 21, in <module> tupl[0] = 2 TypeError: 'tuple' object does not support item assignment
究极原因在于
列表是可变对象,而元组是不可变对象,具体详解可以参考
https://www.cnblogs.com/poloyy/p/15073168.html
特殊的元组
如果一个元组没有包含任何元素,使用 () 表示一个空元组
# 空 tup = () print(tup, type(tup)) # 输出结果 () <class 'tuple'>
如果一个元组只包含一个元素,要怎么表示?
# 只包含一个元素 tup = (1) print(tup, type(tup)) # 输出结果 1 <class 'int'>
哎!竟然是 1,好像是哦,( ) 就是数学运算常见的括号呀,那到底要怎么表示呢
正确表示元组只包含一个元素
# 正确 tup = (1,) print(tup, type(tup)) # 输出结果 (1,) <class 'tuple'>
需要在元素后加一个逗号,使用 (item, ) 表示该元组
总结
- (123, ) 表示的是一个元组,元组中包含一个整数 123
- (123) 表示的是一个带括号的表达式,整数 123 嵌入括号中
元组的简写
当元组在 = 右边的时候,可以省略括号
# 等价写法 a = 1, 2 print(a, type(a)) a = (3, 4) print(a, type(a)) a = 1, print(a, type(a)) a = (3,) print(a, type(a)) # 输出结果 (1, 2) <class 'tuple'> (3, 4) <class 'tuple'> (1,) <class 'tuple'> (3,) <class 'tuple'>
元组常见运算操作
索引 [ ] 取值
# 索引 tup = [1, 2, 3, 4, 5] print(tup[0]) print(tup[-1]) print(tup[2]) # 输出结果 1 5 3
切片 [ : : ] 取值
- 和列表一样,元组也可以切片
- 使用语法:元组[start : end : step],获取元组中在 [start, end) 范围的子元组
- 注意范围 [start, end) 包含 start,不包含 end
- step 是步长,设为 n,则每隔 n 个元素获取一次
# 切片 tup = [1, 2, 3, 4, 5, 6, 7, 8] print(tup[:]) # 取全部元素 print(tup[0:]) # 取全部元素 print(tup[2:5]) # 取第 3 个元素到第 5 个元素 print(tup[::-1]) # 倒序取所有元素 print(tup[-3:-1]) # 取倒数第 3 个元素到倒数第 2 个元素 # 输出结果 [1, 2, 3, 4, 5, 6, 7, 8] [1, 2, 3, 4, 5, 6, 7, 8] [3, 4, 5] [8, 7, 6, 5, 4, 3, 2, 1] [6, 7]
运算符 +
使用运算符 + 连接多个元组
# + tup1 = (1,) tup2 = (2, 3) print(tup1 + tup2) # 输出结果 (1, 2, 3)
运算符 *
使用运算符 * 将元组的元素重复
# * tup = (1, 2) print(tup * 2) # 输出结果 (1, 2, 1, 2)
关键字 in
- 通过关键字 in 检查列表中是否包含指定元素,返回 bool 值
- not in 则是取反
# in tup = (1, 2, 3) print(1 in tup) print(22 not in tup) # 输出结果 True True
常见函数
len(元组) 函数
# len tup = (1, 2, 3) print(len(tup)) # 输出结果 3
max(元组) 函数
# max tup = (1, 2, 3) print(max(tup)) # 输出结果 3
min(元组) 函数
# min tup = (1, 2, 3) print(min(tup)) # 输出结果 1
元组常见方法
元组与列表很相似,两者都表示一个有序的序列,它们的区别在于:
- 列表创建后,可以进行修改
- 元组创建后,不能进行修改
这点在可变对象、不可变对象文章都写了
index(item)
- 在元组中查找指定元素 item
- 如果找到元素 item,则返回元素 item 的索引
- 如果找不到,则抛出异常
# index tup = (1, 2, 3) print(tup.index(1)) print(tup.index(11)) # 输出结果 0 Traceback (most recent call last): File "/Users/Documents/pylearn/第一章:python 基本类型/6_tuple元组.py", line 88, in <module> print(tup.index(11)) ValueError: tuple.index(x): x not in tuple
count(value)
返回元素 value 在元组中出现的次数
# count tup = (1, 2, 1) print(tup.count(1)) print(tup.count(11)) # 输出结果 2 0
元组总结
因为元组是不可变对象,所以元组一般适合用来存储不变的数据