元组(Tuple)

元组(Tuple)是 Python 中一种内置的有序、不可变的序列数据类型。一旦创建,其元素不能被修改、添加或删除。元组使用小括号()表示,元素之间用逗号,分隔。

远足常用于存储一组相关的、不应被更改的数据,例如坐标点(x,y)、日期(年, 月, 日)等。

创建元组

基本语法

# # 创建空元组
empty_tuple = ()

# 创建包含一个元素的元组(注意:单个元素后必须加逗号)
single_tuple = (42,)  # 正确
single_tuple_wrong = (42)  # 错误,这只是一个整数

# 创建包含过个元素的元组
tuple1 = (1, 2, 3, 4, 5)
tuple2 = ("a", "b", "c")
tuple3 = (1, "hello", 3.14, True)

# 使用圆括号不是可选的(但建议使用以提高可读性)
tuple4 = 1, 2, 3

使用tuple()构造函数

# 从列表创建元组
list_tuple = tuple([1, 2, 3])

# 从字符串创建元组(每个字符成为一个元素)
str_tuple = tuple("abc")  # 结果:("a","b","c")

# 从其他可迭代对象创建
range_tuple = tuple(range(5))  # (1,2,3,4)

访问元组元素

索引(Indexing)

t = ('a', 'b', 'c', 'd', 'e')

print(t[0])   # 'a',第一个元素
print(t[2])   # 'c',第三个元素
print(t[-1])  # 'e',最后一个元素
print(t[-2])  # 'd',倒数第二个元素

切片(Slicing)

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

print(t[1:4])    # (2, 3, 4),从索引1到3
print(t[:3])     # (1, 2, 3),从开始到索引2
print(t[2:])     # (3, 4, 5),从索引2到末尾
print(t[::2])    # (1, 3, 5),步长为2
print(t[::-1])   # (5, 4, 3, 2, 1),反转元组

元组的不可变性

元组是不可变的,这意味着不能修改、添加或删除元素。

t = (1, 2, 3)

# ❌ 以下操作会引发 TypeError
# t[0] = 10      # 不可修改元素
# t.append(4)    # 无 append 方法
# t.remove(1)    # 无 remove 方法
# t[0] += 1      # 不可变对象不支持增强赋值

注意:如果元组包含可变对象(如列表),虽然元组本身不能被修改,但其内部的可变对象可以被修改。

t = (1, [2, 3], 4)
t[1].append(5)  # 允许,修改的是列表,不是元组结构
print(t)        # (1, [2, 3, 5], 4)

# 但不能替换整个元素
# t[1] = [2, 3, 4]  # ❌ 会报错

元组的基本操作

连接(Concatenation)

t1 = (1, 2)
t2 = (3, 4)
t3 = t1 + t2  # (1, 2, 3, 4)

重复(Repetition)

t = (1, 2)
t_repeated = t * 3  # (1, 2, 1, 2, 1, 2)

成员检查

使用 innot in 检查元素是否存在。

t = (1, 2, 3, 4)
print(3 in t)      # True
print(5 not in t)  # True

元组的内置函数与方法

内置函数

函数
说明
示例

len(t)

返回元组长度

len((1,2,3))3

max(t)

返回最大值(元素需可比较)

max((1,5,3))5

min(t)

返回最小值

min((1,5,3))1

sum(t)

返回所有元素之和(元素需为数字)

sum((1,2,3))6

sorted(t)

返回排序后的列表

sorted((3,1,2))[1,2,3]

tuple(iterable)

将可迭代对象转为元组

tuple([1,2,3])(1,2,3)

元组方法

由于元组不可变,其方法较少,只有两个:

方法
说明

t.count(x)

返回元素 x 在元组中出现的次数

t.index(x)

返回元素 x 第一次出现的索引位置,若不存在则抛出 ValueError

t = (1, 2, 2, 3, 2)

print(t.count(2))  # 3
print(t.index(3))  # 3
# print(t.index(5))  # ValueError: tuple.index(x): x not in tuple

元组解包

将元组中的元素赋值给多个变量。

t = (1, 2, 3)
a, b, c = t
print(a, b, c)  # 1 2 3

元组解包(Python 3+):使用 * 收集多余元素。

t = (1, 2, 3, 4, 5)
a, *b, c = t
print(a)  # 1
print(b)  # [2, 3, 4]
print(c)  # 5

忽略某些值:使用下划线 _ 忽略不需要的元素。

t = ('Alice', 25, 'Engineer')
name, _, job = t  # 忽略年龄
print(name, job)  # Alice Engineer

元组的应用场景

  • 函数返回多个值

def get_name_age():
    return "Alice", 25  # 返回一个元组

name, age = get_name_age()
  • 作为字典的键

def get_name_age():
    return "Alice", 25  # 返回一个元组

name, age = get_name_age()
  • 函数参数传递:在函数定义中使用 *args 接收可变数量的位置参数,args 是一个元组。

def func(*args):
    print(args)  # args 是一个元组
func(1, 2, 3)  # 输出: (1, 2, 3)

最后更新于