组合数据类型

在 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 允许组合数据类型嵌套使用,例如:

  • 列表的列表(二维数组):

    lua 复制代码
    python
    matrix = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
    print(matrix[1][2])  # 输出: 6
  • 字典的列表

    bash 复制代码
    python
    users = [
        {"name": "Alice", "age": 25},
        {"name": "Bob", "age": 30}
    ]
    print(users[0]["name"])  # 输出: Alice
  • 字典的字典

    bash 复制代码
    python
    data = {
        "user1": {"name": "Alice", "age": 25},
        "user2": {"name": "Bob", "age": 30}
    }
    print(data["user1"]["age"])  # 输出: 25

7. 组合数据类型的选择指南

数据类型 有序性 可变性 唯一性 适用场景
列表(List) 需要动态修改的序列(如待办事项)
元组(Tuple) 固定不变的序列(如坐标、配置)
字典(Dictionary) ❌(3.7+ 有序) 键唯一 键值对存储(如用户信息)
集合(Set) 元素唯一 快速去重或成员检测(如标签)
字符串(String) 文本处理(如名字、句子)

总结

  • 列表:灵活、可修改的序列。
  • 元组:不可变的序列,适合固定数据。
  • 字典:键值对存储,快速查找。
  • 集合:无序不重复,适合去重和集合运算。
  • 字符串:不可变的字符序列,支持文本操作。
相关推荐
麻辣清汤21 分钟前
结合BI多维度异常分析(日期-> 商家/渠道->日期(商家/渠道))
数据库·python·sql·finebi
钢铁男儿30 分钟前
Python 正则表达式(正则表达式和Python 语言)
python·mysql·正则表达式
钢铁男儿40 分钟前
Python 正则表达式实战:解析系统登录与进程信息
开发语言·python·正则表达式
前端小趴菜051 小时前
python - range
python
☺����1 小时前
实现自己的AI视频监控系统-第一章-视频拉流与解码1
人工智能·python·音视频
前端小趴菜052 小时前
python - 元组常用操作
python
前端小趴菜052 小时前
python - 列表方法
python
Kan先生2 小时前
对象存储解决方案:MinIO 的架构与代码实战
数据库·python
秋难降2 小时前
别再用暴力排序了!大小顶堆让「取极值」效率飙升至 O (log n)
python·算法·排序算法