文章目录
起这么个标题只是为了吸引你进来看看,能不能十分钟介绍清楚元组,老王也没把握...
1. 什么是元组?
元组与列表非常类似,最大的一点区别就是元组是不可修改的,所以你可以叫它只读列表(关于只读特性,后面会详细讲)。
元组的定义与列表类似,只不过列表用中括号[]
,而元组用小括号()
。
# 创建包含多个元素的元组
first_tuple = ("元素1", "元素2", "元素3")
# 创建空元组
empty_tuple = ()
# 创建只包含一个元素的元组
second_tuple = ("元素1",)
当创建只包含一个元素的元组时,在元素后面一定要跟一个逗号,如果你写成second_tuple = ("元素1")
,**那么Python不会认为这是在定义元组,而是会把他当成一个加了小括号的字符串。**这种情况下,Python就会理所当然的想:你以为加个小括号我就不认识你了,你还是个普通字符串。
2. 元组的常用操作
2.1 索引和切片
元组和列表一样,支持索引和切片。例如:
tup1 = ("张三", "李四", "王五", "赵六")
print(tup1[1]) # 输出元组第2个元素
print(tup1[-1]) # 输出元组最后1个元素
print(tup1[1:]) # 输出元组第2个元素,以及后面的所有元素
2.2 遍历元组
tup1 = ("张三", "李四", "王五", "赵六")
# 遍历输出元组中的所有元素
for name in tup1:
print(name)
2.3 获取元组中元素个数len()
tup = ("张三", "李四", "王五", "赵六")
print(len(tup))
2.4 元素查询:in,index(), count()
in
: 判断某元素是否在元祖中
tup = ("张三", "李四", "王五", "赵六")
# 判断某元素是否在元祖中
if "张三" in tup:
print("张三在元组中。")
else:
print("张三不在元组中。")
index()
: 获取某个元素的索引
tup = ("张三", "李四", "王五", "赵六")
# 获取某个元素的索引
print(tup.index("李四"))
注意:和列表一样,元组的index()
也是从左侧开始查,然后返回查到的第一个符合条件的元素的索引。
count()
: 统计某个元素在元祖中出现的次数
tup = ("张三", "李四", "王五", "赵六", "李四")
# 统计某个元素在元祖中出现的次数
print(tup.count("李四"))
2.5 运算符:+ 和 *
-
加号
+
元组虽然不能改变元素的值,但是可以用加号
+
将多个元组组合起来。
tup1 = (1, 2, 3)
tup2 = (4, 5, 6)
tup3 = tup1 + tup2
print(tup3)
- 乘号
*
乘号*
可以使某个元祖复制多次,例如:
tup1 = (1, 2, 3)
tup2 = tup1 * 4
print(tup2)
2.6 元素最大值和最小值:max, min
tup = (2, 5, 7, 2, 4, 1)
print(max(tup)) # 输出最大的元素值
print(min(tup)) # 输出最小的元素值
3. 元组的不可变特性
元组的不可变特性是指不可以改变元素的值。例如:
tup = (1, 2, 3, 4)
# 如果尝试将第一个元素的值该位100,则会出错
tup[0] = 100
但有人可能举下面的例子:
tup = (1, 2, 3, 4)
print(tup)
tup = (100, 2, 3, 4)
print(tup)
这么做看起来确实是改变了第一个元素的值,但实际上,其实它是重新创建了一个元组(100, 2, 3, 4)
,然后绑定到了tup
上。
然后,还有人可能会拿出下面这段代码:
tup = (1, 2, [3, 4, 5], 4)
print(tup)
tup[2][2] = 100
print(tup)
诶,这不是元素的值被改变了吗?元组不是不能改变元素的值吗?
其实,元组元素的值并没有发生改变。在上面的例子中,元组的第一个元素值是1
,第二个元素值是2
,但是第三个元素是列表,所以Python将列表在内存中的地址作为第三个元素的值;第四个元素是4
。
从元组的角度来讲,执行tup[2][2]=100
时,元组第三个元组的值并没有改变,还是指向原来那个列表,只不过列表所在的内存中的值发生了改变。
举例来说,tup
就向4个紧挨着放的小盒子,第一个盒子里放了个苹果,第二个盒子里放了桃,第三个盒子里放了个杯子(杯子里放了三个球),第四个盒子里放了个西瓜。我们执行tup[2][2]=100
指令时,其实相当于把杯子里的一个球拿出来换掉了,但是第三个盒子里放的杯子没变。