Python 3 - 元组
Python 3 - 元组
Section titled “Python 3 - 元组”元组(tuple)是 Python 对象的有序序列。与列表类似,元组存储了元素的集合。然而,元组的决定性特征是其不可变性——一旦元组创建,其元素就不能被更改、添加或删除。
语法:元组通常通过列出逗号分隔的值来创建,可以选择用圆括号 () 括起来。
# 创建元组tup1 = ('physics', 'chemistry', 1997, 2000)tup2 = (1, 2, 3, 4, 5)tup3 = "a", "b", "c", "d" # 圆括号是可选的
# 空元组empty_tup = ()
# 包含单个元素的元组(需要末尾的逗号)single_tup = (50,)not_a_tuple = (50) # 根据圆括号的规则,这只是整数 50
print(type(single_tup)) # 输出: <class 'tuple'>print(type(not_a_tuple)) # 输出: <class 'int'>与列表和字符串一样,元组的索引从 0 开始。它们支持切片、拼接以及其他序列操作。
使用方括号 [] 结合索引或切片表示法来访问元组中的元素。
#!/usr/bin/env python3
tup1 = ('physics', 'chemistry', 1997, 2000)tup2 = (1, 2, 3, 4, 5, 6, 7)
print(f"tup1[0]: {tup1[0]}")print(f"tup2[1:5]: {tup2[1:5]}") # 从索引 1 开始(包含),直到索引 5(不包含)的元素print(f"tup1[-1]: {tup1[-1]}") # 最后一个元素输出:
tup1[0]: physicstup2[1:5]: (2, 3, 4, 5)tup1[-1]: 2000不可变性:更新元组
Section titled “不可变性:更新元组”元组是不可变的。元组创建后,你不能更改其中的元素。
#!/usr/bin/env python3
tup1 = (12, 34.56)
# 这个操作是无效的,会引发 TypeError:# tup1[0] = 100 # TypeError: 'tuple' object does not support item assignment但是,你可以通过拼接或切片现有元组来创建新的元组。
#!/usr/bin/env python3
tup1 = (12, 34.56)tup2 = ('abc', 'xyz')
# 通过组合 tup1 和 tup2 创建一个新的元组tup3 = tup1 + tup2print(f"New combined tuple: {tup3}")输出:
New combined tuple: (12, 34.56, 'abc', 'xyz')删除元组元素(或整个元组)
Section titled “删除元组元素(或整个元组)”由于元组是不可变的,你不能从元组中移除单个元素。
但是,你可以使用 del 语句删除整个元组变量。这会移除该名称与元组对象的绑定(如果没有其他引用存在,该对象可能会被垃圾回收)。
#!/usr/bin/env python3
tup_to_delete = ('physics', 'chemistry', 1997, 2000)
print(f"Before deletion: {tup_to_delete}")
del tup_to_delete
# 在删除后尝试访问 tup_to_delete 将会引发 NameError:# print("After deleting tup:")# print(tup_to_delete) # NameError: name 'tup_to_delete' is not defined要有效地“移除”一个元素,你必须通过切片和拼接你想要保留的部分来创建一个新的元组。
#!/usr/bin/env python3original_tup = (1, 2, 3, 4, 5)# 创建一个不包含索引 2 处元素(值为 3)的新元组new_tup = original_tup[:2] + original_tup[3:]print(f"New tuple without element at index 2: {new_tup}") # 输出: (1, 2, 4, 5)基本元组操作
Section titled “基本元组操作”元组支持常见的序列操作:
| Python 表达式 | 结果 | 描述 |
|---|---|---|
len((1, 2, 3)) | 3 | 长度(元素的数量) |
(1, 2, 3) + (4, 5, 6) | (1, 2, 3, 4, 5, 6) | 拼接(创建一个新的元组) |
('Hi!',) * 4 | ('Hi!', 'Hi!', 'Hi!', 'Hi!') | 重复(创建一个新的元组) |
3 in (1, 2, 3) | True | 成员测试 |
for x in (1, 2, 3): print(x, end=' ') | 1 2 3 | 迭代 |
max((1, 5, 2)) | 5 | 最大值 |
min((1, 5, 2)) | 1 | 最小值 |
索引(访问单个元素)和切片(提取子序列)的工作方式与列表和字符串完全相同。
languages = ('C++', 'Java', 'Python', 'Go')| Python 表达式 | 结果 | 描述 |
|---|---|---|
languages[2] | 'Python' | 访问索引 2 处的元素(从 0 开始) |
languages[-1] | 'Go' | 负数索引:从右边开始计数(-1 是最后一个元素) |
languages[1:] | ('Java', 'Python', 'Go') | 切片:从索引 1 到末尾的元素 |
languages[:2] | ('C++', 'Java') | 切片:从开头直到(不包含)索引 2 的元素 |
languages[0:3:2] | ('C++', 'Python') | 带步长的切片:从索引 0 到 3,每隔 2 个元素取一个 |
何时使用元组 vs. 列表
Section titled “何时使用元组 vs. 列表”在以下情况使用元组:
- 你想确保数据创建后不能被更改(数据完整性)。
- 你需要一个可以作为字典键或存储在集合中的序列(需要不可变元素)。
- 你想表示一组固定的元素集合,比如坐标 (x, y) 或 RGB 颜色值。
- 与列表相比,迭代时你可能会获得轻微的性能优势(尽管通常可以忽略不计)。
在以下情况使用列表:
- 你需要一个可能需要增长、缩小或修改元素的集合。
- 元素的顺序很重要,并且你需要像
append()、insert()、remove()、sort()等方法。
内置元组函数
Section titled “内置元组函数”Python 包含一个与元组相关的特定函数:
| 函数 | 描述 |
|---|---|
tuple(iterable) | 将可迭代对象(如列表、字符串或 range)转换为元组。如果参数本身已经是元组,则返回原值。 |
#!/usr/bin/env python3
my_list = [1, 2, 3]my_string = "abc"
tuple_from_list = tuple(my_list)print(f"Tuple from list: {tuple_from_list}")
tuple_from_string = tuple(my_string)print(f"Tuple from string: {tuple_from_string}")输出:
Tuple from list: (1, 2, 3)Tuple from string: ('a', 'b', 'c')