一、元组(tuple)
元组是 Python 中有序、不可修改的序列,常用于存储不会变化的数据(比如固定的配置信息、坐标等)。
1. 元组的创建
元组用 () 包裹元素,元素之间用逗号分隔,语法非常简单:
python
运行
ini
# 1. 直接用 () 创建(推荐)
tuple1 = (1, 2, 3, "Python", True) # 元素可以是不同类型(数字、字符串、布尔值等)
tuple2 = ("苹果", "香蕉", "橙子") # 同类型元素的元组
# 2. 省略 () 创建(简写形式)
tuple3 = 10, 20, 30 # 等价于 (10, 20, 30),注意必须有逗号
# 3. 单个元素的元组(必须加逗号,否则会被当成普通变量)
tuple4 = (5,) # 正确:元组类型
tuple5 = (5) # 错误:int类型(不是元组)
# 4. 空元组
empty_tuple = ()
2. 元组的核心特性
- 有序:元素的存储顺序和创建时一致,支持通过索引访问(索引从 0 开始)。
- 不可修改:创建后不能添加、删除或修改元素(这是元组和列表最核心的区别)。
python
运行
ini
tuple1 = (1, 2, 3)
print(tuple1[0]) # 输出:1(通过索引访问第一个元素)
print(tuple1[-1]) # 输出:3(通过负索引访问最后一个元素)
# 以下操作会报错(元组不可修改)
tuple1[0] = 100 # 错误:不能修改元素
tuple1.append(4) # 错误:没有append方法(无法添加元素)
del tuple1[1] # 错误:不能删除元素
3. 元组的常用操作
虽然元组不可修改,但有一些实用的内置操作:
python
运行
python
tuple2 = ("苹果", "香蕉", "橙子")
# 1. 计算长度(元素个数)
print(len(tuple2)) # 输出:3
# 2. 查找元素是否存在(in/not in)
print("香蕉" in tuple2) # 输出:True
print("葡萄" not in tuple2) # 输出:True
# 3. 统计元素出现次数
tuple3 = (1, 2, 2, 3, 2)
print(tuple3.count(2)) # 输出:3
# 4. 查找元素的索引(找到第一个匹配项)
print(tuple3.index(3)) # 输出:3(3在索引3的位置)
# 5. 元组拼接(生成新元组,原元组不变)
tuple4 = (4, 5)
new_tuple = tuple3 + tuple4
print(new_tuple) # 输出:(1, 2, 2, 3, 2, 4, 5)
二、字典(dictionary)
字典是 Python 中无序(Python 3.7 + 后实际有序)、键值对(key-value) 类型的数据结构,核心作用是通过 "键" 快速查找 "值"(比如存储用户信息:姓名→小明,年龄→20)。
1. 字典的创建
字典用 {} 包裹,每个元素是 key: value 的形式,键值对之间用逗号分隔:
python
运行
makefile
# 1. 直接用 {} 创建(推荐)
user = {
"name": "小明", # key: "name",value: "小明"
"age": 20, # key: "age",value: 20
"gender": "男",
"hobbies": ["篮球", "游戏"] # value可以是列表、元组等复杂类型
}
# 2. 用 dict() 函数创建
student = dict(name="小红", age=18, score=95) # 键不需要加引号
empty_dict = dict() # 空字典
# 3. 空字典的简写
empty_dict2 = {}
2. 字典的核心规则
- key(键)的要求 :必须是不可变类型 (字符串、数字、元组),且不能重复(重复的键会覆盖前面的值)。
- value(值)的要求:可以是任意类型(数字、字符串、列表、字典等),可以重复。
python
运行
ini
# 错误的key示例(以下会报错)
dict1 = {[1,2]: "错误"} # 列表是可变类型,不能作为key
dict2 = {"name": "张三", "name": "李四"} # 重复key,最终存储"name": "李四"(覆盖)
# 正确的key示例
dict3 = {(1,2): "坐标", "score": 90, 100: "满分"} # 元组、字符串、数字都可以作为key
3. 字典的常用操作(重点)
字典的核心操作围绕 "增删改查" 展开,都是通过 key 实现的:
python
运行
scss
user = {"name": "小明", "age": 20, "gender": "男"}
# 1. 查:通过key获取value(最常用)
print(user["name"]) # 输出:小明(直接用[key]访问)
print(user.get("age")) # 输出:20(用get()方法访问,推荐)
# 注意:key不存在时的区别
# print(user["height"]) # 报错:KeyError(key不存在)
print(user.get("height", 175)) # 输出:175(key不存在时返回默认值,不会报错)
# 2. 增:添加新的键值对
user["height"] = 175 # 新增key: "height",value: 175
user["hobbies"] = ["篮球", "游戏"]
print(user) # 输出:{'name': '小明', 'age': 20, 'gender': '男', 'height': 175, 'hobbies': ['篮球', '游戏']}
# 3. 改:修改已有key的value
user["age"] = 21 # key已存在,直接覆盖value
print(user["age"]) # 输出:21
# 4. 删:删除键值对
del user["gender"] # 通过key删除
print(user) # 输出:{'name': '小明', 'age': 21, 'height': 175, 'hobbies': ['篮球', '游戏']}
user.pop("height") # 用pop()删除,返回对应的value
print(user) # 输出:{'name': '小明', 'age': 21, 'hobbies': ['篮球', '游戏']}
# 5. 其他常用操作
print(len(user)) # 输出:3(统计键值对个数)
print(user.keys()) # 输出:dict_keys(['name', 'age', 'hobbies'])(获取所有key)
print(user.values()) # 输出:dict_values(['小明', 21, ['篮球', '游戏']])(获取所有value)
print(user.items()) # 输出:dict_items([('name', '小明'), ('age', 21), ('hobbies', ['篮球', '游戏'])])(获取所有键值对)
# 6. 遍历字典(常用)
for key in user:
print(f"{key}: {user[key]}") # 遍历key,通过key获取value
三、元组和字典的核心区别
| 特性 | 元组(tuple) | 字典(dictionary) |
|---|---|---|
| 存储形式 | 有序序列(单个元素) | 无序键值对(key-value) |
| 是否可修改 | 不可修改(只读) | 可修改(增删改键值对) |
| 访问方式 | 通过索引(如 tuple [0]) | 通过 key(如 dict ["name"]) |
| 元素要求 | 元素可以是任意类型 | key 必须是不可变类型,value 任意 |
| 核心用途 | 存储固定不变的数据 | 存储需要快速查找、映射的数据 |
总结
- 元组 :用
()创建,有序不可修改,通过索引访问,适合存储固定数据(如坐标、配置项)。 - 字典 :用
{}创建,键值对结构,通过 key 快速访问 value,支持增删改,适合存储需要映射关系的数据(如用户信息、配置表)。 - 关键记住:元组的核心是 "不可变",字典的核心是 "键值对 + 快速查找"。