在 Python 中,组合数据类型(Composite Data Types) 用于将多个数据值组织成一个整体,方便存储、操作和管理。常见的组合数据类型包括 列表(List)、元组(Tuple)、字典(Dictionary)、集合(Set) 以及 字符串(String) (虽然字符串本质是字符序列,但常被视为不可变的组合类型)。
1. 列表(List)
特点
- 有序、可变(可增删改元素)。
- 元素可以是任意类型(数字、字符串、列表、字典等)。
- 用方括号
[]
表示。
示例
python
# 创建列表
fruits = ["apple", "banana", "orange"]
numbers = [1, 2, 3, 4, 5]
mixed = [1, "hello", True, [1, 2]]
# 访问元素(索引从 0 开始)
print(fruits[0]) # 输出: apple
print(numbers[-1]) # 输出: 5(负索引表示倒数)
# 切片(左闭右开区间)
print(numbers[1:4]) # 输出: [2, 3, 4]
# 修改元素
fruits[1] = "grape"
print(fruits) # 输出: ['apple', 'grape', 'orange']
# 常用方法
fruits.append("pear") # 末尾添加
fruits.insert(1, "mango") # 指定位置插入
removed = fruits.pop(2) # 删除并返回指定位置元素
print(removed) # 输出: grape
print(fruits) # 输出: ['apple', 'mango', 'orange', 'pear']
常见列表操作总结
操作 | 代码示例 | 说明 |
---|---|---|
最大值 | max(list2) |
返回列表中的最大值 |
最小值 | min(list2) |
返回列表中的最小值 |
长度 | len(list2) |
返回列表的元素个数 |
求和 | sum(list2) |
返回列表所有元素的和 |
排序 | sorted(list2) |
返回排序后的新列表(不修改原列表) |
反转 | list2[::-1] |
返回反转后的新列表 |
去重 | list(set(list2)) |
去除重复元素(顺序可能改变) |
2. 元组(Tuple)
特点
- 有序、不可变(创建后不能修改元素)。
- 用圆括号
()
表示(可省略括号)。 - 适合存储不应被修改的数据(如配置、常量)。
示例
python
# 创建元组
colors = ("red", "green", "blue")
coords = 10, 20 # 括号可省略
single_element = (42,) # 单元素元组需加逗号
# 访问元素
print(colors[1]) # 输出: green
# 不可变性示例(会报错)
try:
colors[0] = "yellow"
except TypeError as e:
print("错误:", e) # 输出: 'tuple' object does not support item assignment
# 解包(Unpacking)
x, y, z = colors
print(x, y, z) # 输出: red green blue
3. 字典(Dictionary)
特点
- 无序(Python 3.7+ 实际按插入顺序存储)、可变。
- 由 键(key)-值(value)对 组成,键必须唯一且不可变(如字符串、数字、元组)。
- 用花括号
{}
表示。
示例
python
# 创建字典
person = {
"name": "Alice",
"age": 25,
"city": "New York"
}
# 访问值
print(person["name"]) # 输出: Alice
print(person.get("age", "Unknown")) # 输出: 25(推荐用 get() 避免 KeyError)
# 修改/添加键值对
person["age"] = 26
person["job"] = "Engineer"
print(person) # 输出: {'name': 'Alice', 'age': 26, 'city': 'New York', 'job': 'Engineer'}
# 删除键值对
del person["city"]
print(person.pop("job")) # 输出: Engineer
# 遍历字典
for key, value in person.items():
print(f"{key}: {value}")
# 输出:
# name: Alice
# age: 26
4. 集合(Set)
特点
- 无序、不重复(自动去重)。
- 用花括号
{}
表示(无键值对),或set()
函数创建。 - 适合快速去重或成员检测。
示例
python
# 创建集合
tags = {"python", "data", "science", "python"} # 自动去重
print(tags) # 输出: {'data', 'python', 'science'}(顺序可能不同)
# 空集合必须用 set()({} 表示空字典)
empty_set = set()
# 添加元素
tags.add("machine learning")
tags.update(["AI", "data"]) # 添加多个元素
print(tags) # 输出: {'AI', 'data', 'machine learning', 'python', 'science'}
# 删除元素
tags.remove("AI") # 不存在会报错
tags.discard("xyz") # 不存在不会报错
# 集合运算
a = {1, 2, 3}
b = {3, 4, 5}
print(a & b) # 交集: {3}
print(a | b) # 并集: {1, 2, 3, 4, 5}
print(a - b) # 差集: {1, 2}
5. 字符串(String)
特点
- 有序、不可变的字符序列。
- 用单引号
'
或双引号"
表示。 - 支持索引、切片和字符串方法。
示例
bash
python
# 创建字符串
s = "Hello, Python!"
# 索引和切片
print(s[0]) # 输出: H
print(s[7:13]) # 输出: Python
# 常用方法
print(s.upper()) # 输出: HELLO, PYTHON!
print(s.split(",")) # 输出: ['Hello', ' Python!']
print(" ".join(["Python", "is", "awesome"])) # 输出: Python is awesome
6. 组合数据类型的嵌套
Python 允许组合数据类型嵌套使用,例如:
-
列表的列表(二维数组):
luapython matrix = [[1, 2, 3], [4, 5, 6], [7, 8, 9]] print(matrix[1][2]) # 输出: 6
-
字典的列表:
bashpython users = [ {"name": "Alice", "age": 25}, {"name": "Bob", "age": 30} ] print(users[0]["name"]) # 输出: Alice
-
字典的字典:
bashpython data = { "user1": {"name": "Alice", "age": 25}, "user2": {"name": "Bob", "age": 30} } print(data["user1"]["age"]) # 输出: 25
7. 组合数据类型的选择指南
数据类型 | 有序性 | 可变性 | 唯一性 | 适用场景 |
---|---|---|---|---|
列表(List) | ✅ | ✅ | ❌ | 需要动态修改的序列(如待办事项) |
元组(Tuple) | ✅ | ❌ | ❌ | 固定不变的序列(如坐标、配置) |
字典(Dictionary) | ❌(3.7+ 有序) | ✅ | 键唯一 | 键值对存储(如用户信息) |
集合(Set) | ❌ | ✅ | 元素唯一 | 快速去重或成员检测(如标签) |
字符串(String) | ✅ | ❌ | ❌ | 文本处理(如名字、句子) |
总结
- 列表:灵活、可修改的序列。
- 元组:不可变的序列,适合固定数据。
- 字典:键值对存储,快速查找。
- 集合:无序不重复,适合去重和集合运算。
- 字符串:不可变的字符序列,支持文本操作。