上一篇:Python的基础变量类型之字符串和数字类型-CSDN博客
目录
在Python中,复合类型(Compound Types)是指可以容纳多个元素或值的类型。序列类型(Sequence Types)、映射类型(Mapping Types)和集合类型(Set Types)是三种主要的复合数据类型,它们各自有不同的特性和用途。
1.序列类型(Sequence Types)
序列类型是Python中可迭代且有序的数据类型,元素可通过索引访问。常见的序列类型包括列表(list)、元组(tuple)、字符串(str)和范围(range)。
1.1核心特征
有序 集合,元素通过 整数索引 访问(从0开始)。元素可以重复。
1.2关键点
- 顺序重要: 元素的位置(索引)是确定的。
- 索引访问: 使用
[index]来获取特定位置的元素。 - 切片操作: 支持切片
[start:stop:step]来获取子序列。 - 可迭代: 可以使用
for循环遍历所有元素。 - 长度: 使用
len()函数获取元素个数。
1.3可变 vs 不可变
可变序列: 创建后可以修改内容(增、删、改元素)。主要代表:列表 (list)
不可变序列: 创建后内容不能改变。主要代表:元组 (tuple)、字符串 (str)、字节串 (bytes)、范围 (range)。
常见操作: 连接 (+),重复 (*),成员检查 (in),查找 (index()),计数 (count()),排序 (sorted(),不改变原序列) 等。
1.3.1主要类型
list: 最通用、最常用的可变序列,支持动态增删元素。
my_list = [1, 2, 3]
my_list.append(4)
tuple: 不可变序列。常用于表示固定的一组值、函数返回多个值、作为字典键等。
my_tuple = (1, 2, 3)
str: 不可变序列,元素是字符。是字符序列,支持切片操作:
my_str = "hello"
print(my_str[1:3]) # 输出 "el"
range: 不可变序列,表示一个整数范围。常用于for循环计数。
for i in range(5):
print(i)
2.映射类型(Mapping Types)
映射类型存储键值对(key-value pairs),通过键快速访问值。字典(dict)是唯一的内置映射类型。
2.1核心特征
存储 键值对 (key: value pairs) 的集合。通过 键 (key) 而不是位置索引来访问对应的 值 (value)。
2.2 关键点
- 键的唯一性: 在一个映射中,键必须是唯一的。如果添加已存在的键,会覆盖旧值。
- 键不可变性: 键必须是不可变类型(如
str,int,float,tuple),因为需要计算哈希值。值可以是任意类型。 - 无序性 (Python 3.6及之前): 标准字典 (
dict) 在Python 3.6及之前版本中不保证元素的存储和遍历顺序(虽然实现细节可能按插入顺序,但不能依赖)。Python 3.7+ 官方保证dict保留元素插入顺序。 但这主要是一个实现保证,映射的核心抽象仍是基于键访问,而非顺序。 - 可变性: 主要的映射类型
dict是可变的,可以动态添加、删除、修改键值对。 - 高效查找: 基于哈希表实现,通过键查找值的速度非常快(接近O(1)时间复杂度)。
常见操作: 通过键访问值 (d[key] 或 d.get(key)),设置/添加键值对 (d[key] = value),删除键值对 (del d[key] 或 d.pop(key)),检查键是否存在 (key in d),获取所有键 (d.keys()),所有值 (d.values()),所有键值对 (d.items()),更新 (d.update(other_dict)) 等。
2.3主要类型
dict: Python中最核心、最常用的映射类型。字典(dict)使用花括号或dict()创建:
my_dict = {'name': 'Alice', 'age': 25}
print(my_dict['name']) # 输出 "Alice"
- 字典的键必须为不可变类型(如字符串、数字或元组),值可以是任意类型:
my_dict['age'] = 26 # 修改值
my_dict['city'] = 'New York' # 新增键值对
业余了解
collections.defaultdict: 提供默认值的字典,访问不存在的键时返回指定的默认值。collections.ChainMap: 将多个映射链接成一个视图。types.MappingProxyType: 创建字典的只读视图(不可变)。
3.集合类型 (Set Types)
3.1核心特征
存储 唯一、无序 元素集合。主要用于成员关系测试(检查元素是否存在)、消除重复项以及进行数学集合运算(并、交、差、对称差)。
3.2关键点
- 元素唯一性: 集合中不允许有重复的元素。添加重复元素会被自动忽略。
- 无序性: 集合中的元素没有固定顺序。不能通过索引访问元素(因为没有索引的概念)。遍历或打印的顺序可能与插入顺序不同。
- 元素不可变性: 集合的元素本身必须是不可变类型(哈希类型),例如
int,float,str,tuple。不能包含可变元素如list,dict或其他集合(但frozenset可以)。
3.3可变 vs 不可变
可变集合: set。创建后可以添加、删除元素。
不可变集合: frozenset。一旦创建,内容不可修改。可以作为字典的键或另一个集合的元素。
常见操作: 添加元素 (add()),移除元素 (remove(), discard(), pop()),清空 (clear()),成员检查 (in),求长度 (len()),集合运算等。
3.3.1主要类型
set: 可变集合。{1, 2, 3, 'apple'}
my_set = {1, 2, 3, 'apple'} # 直接创建
another_set = set([4, 5, 6]) # 从列表转换
frozenset: 不可变集合。frozenset([1, 2, 3])
frozen = frozenset([1, 2, 3]) # 从列表创建
set与frozenset的主要区别:
| 特性 | set | frozenset |
|---|---|---|
| 可变性 | 可变(可修改) | 不可变(不能修改) |
| 创建语法 | {元素} 或 set(iterable) | frozenset(iterable) |
| 作为字典键 | 不支持 | 支持 |
| 内存开销 | 略高(因动态调整) | 略低(固定大小) |
| 典型用例 | 动态数据管理 | 静态数据存储或哈希键 |
总结
| 特性 | 序列 (Sequence) | 映射 (Mapping) | 集合 (Set) |
|---|---|---|---|
| 核心元素 | 有序的元素 | 键值对 (key: value) | 唯一的元素 |
| 访问方式 | 整数索引 ([index]) | 键 ([key]) | 无法索引 (无序) |
| 顺序 | 有序 (位置重要) | Python 3.7+ 有序 (保留插入顺序),但核心抽象是键访问 | 无序 |
| 元素唯一性 | 元素可以重复 | 键必须唯一 | 元素必须唯一 |
| 元素要求 | 任意类型 (通常一致) | 键:不可变类型 值:任意类型 | 元素:不可变类型 |
| 可变性 | 有可变(list)和不可变(tuple, str) | 主要可变(dict) 有不可变视图 | 有可变(set)和不可变(frozenset) |
| 主要用途 | 存储有序数据列表 | 存储关联数据 (键找值) | 成员检查、去重、集合运算 |
| 典型代表 | list, tuple, str | dict |
了解了它们的区别与特点更有利于我们去学习与掌握。
1070

被折叠的 条评论
为什么被折叠?



