组合数据类型

在 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) 文本处理(如名字、句子)

总结

  • 列表:灵活、可修改的序列。
  • 元组:不可变的序列,适合固定数据。
  • 字典:键值对存储,快速查找。
  • 集合:无序不重复,适合去重和集合运算。
  • 字符串:不可变的字符序列,支持文本操作。
相关推荐
Draina26 分钟前
CBC填充预言攻击-CBC Padding Oracle Crypto Attack
python·安全·web安全·网络安全·密码学·安全性测试
Angel Q.1 小时前
特征提取 | DINO 到 DINOv3
图像处理·python
不如语冰1 小时前
AI大模型入门-pytorch-张量2 tensor创建
python
NPE~2 小时前
[AI]Agent开发——ADK框架使用
人工智能·python·ai·教程·adk·agent开发
矮个史蒂芬2 小时前
统计verilog .v文件中output 的bit数
python
gwf2162 小时前
磨损均衡算法(Wear Leveling)——SSD如何让每块闪存“公平退休“?
运维·数据库·人工智能·python·嵌入式硬件·算法·智能硬件
爱吃提升2 小时前
python 分布式爬虫、爬虫合规与综合实战项目
分布式·爬虫·python
审小匠OpenCPAi2 小时前
银行流水核查怎么自动化?单边匹配、双向勾稽与图聚类异常检测的工程对比
java·前端·人工智能·python·审计
元Y亨H3 小时前
Pandas 解析 Excel 导致的内存溢出(MemoryError)
python·excel
金銀銅鐵4 小时前
[Python] 用 turtle 来绘制瑞典国旗
python