1 元组
定义和使用元组
元组(tuple)跟列表非常的类似,元组也是多个元素按照一定的顺序构成的序列。但跟列表最大的区别就是,它是一种不可变的数据类型。这就意味着元组类型的变量一旦定义,其中的元素不能再添加或删除,而且元素的值也不能进行修改。定义元组通常使用()
字面量语法。
# 定义一个三元组
t1 = (1, 2, 3)
# 定义一个四元组
t2 = ('Stan', 28, True, '上海')
除此以外,还可以通过 Python 内置的 tuple
函数将其他序列变成元组。准确的说,tuple
并不是一个普通的函数,它是创建元组对象的构造器函数,它可以接受一个可迭代对象作为可选参数,例如列表、字符串、集合等。
t0 = tuple()
t1 = tuple([1, 2, 3])
t2 = tuple({4, 5, 6})
print(t0) #()
print(t1) #(1, 2, 3)
print(t2) #(4, 5, 6)
元组的名称
一个元组中如果有两个元素,我们就称之为二元组;一个元组中如果五个元素,我们就称之为五元组。需要提醒大家注意的是,()
表示空元组,但是如果元组中只有一个元素,需要加上一个逗号,否则()
就不是代表元组的字面量语法,而是改变运算优先级的圆括号,所以('hello', )
和(100, )
才是一元组,而('hello')
和(100)
只是字符串和整数。我们可以通过下面的代码来加以验证。
# 空元组
a = ()
print(type(a)) # <class 'tuple'>
# 不是元组
b = ('hello')
print(type(b)) # <class 'str'>
c = (100)
print(type(c)) # <class 'int'>
# 一元组
d = ('hello', )
print(type(d)) # <class 'tuple'>
e = (100, )
print(type(e)) # <class 'tuple'>
元组的拼接
t1 = (1, 2, 3)
t2 = (4, 5, 6)
t3 = t1 + t2
print(t3) # (1, 2, 3, 4, 5, 6)
获取元组的长度
# 定义一个三元组
t1 = (1, 2, 3)
# 查看元组中元素的数量
print(len(t1)) # 3
元组的索引
# 定义一个三元组
t1 = (1, 2, 3)
t2 = (4, 5, 6)
# 通过索引运算获取元组中的元素
print(t1[0], t1[-3])
判断元素是否在元组内
t1 = (1, 2, 3)
t2 = (4, 5, 6)
print(1 in t1) # True
print(8 in t2) # False
元组的切片
# 定义一个三元组
t1 = (1, 2, 3)
# 通过索引运算获取元组中的元素
print(t1[0:2]) # (1, 2)
2 元组的方法
作为一个不可变的数据容器,元组不支持修改元素的操作,因此没有像列表那样的 append()
、insert()
、extend()
、remove()
和 pop()
等方法。
查找元素在元组中的索引
元组的 index
方法跟列表的一模一样
items = ('Python', 'Java', 'Java', 'Go', 'Kotlin', 'Python')
# 查找元素的索引位置
print(items.index('Python')) # 0
print(items.index('Python', 2)) # 5
print(items.index('Java', 3)) # 报错 数组越界
查找元素在元组中出现的次数
列表类型的 count
方法用来统计一个元素在列表中出现的次数。
items = ('Python', 'Java', 'Java', 'Go', 'Kotlin', 'Python')
# 查找元素出现的次数
print(items.count('Python')) # 2
print(items.count('Go')) # 1
print(items.count('Swfit')) # 0
如何修改元组中的元素
可以先将元组转换为列表,修改后再转换回元组(本质上是创建了一个新的元组)。代码如下:
items_tuple = ('Python', 'Java', 'Java', 'Go', 'Kotlin', 'Python')
items_list = list(items_tuple) # 转换为列表
items_list[0] = 'JS' # 修改列表中的元素
items_tuple = tuple(items_list) # 转换回元组
print(items_tuple) # ('JS', 'Java', 'Java', 'Go', 'Kotlin', 'Python')