复合类型之序列类型、映射类型和集合类型

部署运行你感兴趣的模型镜像

上一篇:Python的基础变量类型之字符串和数字类型-CSDN博客

目录

1.序列类型(Sequence Types)

1.1核心特征

1.2关键点

1.3可变 vs 不可变

1.3.1主要类型

2.映射类型(Mapping Types)

2.1核心特征

 2.2 关键点

2.3主要类型

3.集合类型 (Set Types)

3.1核心特征

3.2关键点

3.3可变 vs 不可变

3.3.1主要类型

总结


在Python中,复合类型(Compound Types)是指可以容纳多个元素或值的类型。序列类型(Sequence Types)、映射类型(Mapping Types)和集合类型(Set Types)是三种主要的复合数据类型,它们各自有不同的特性和用途。

1.序列类型(Sequence Types)

序列类型是Python中可迭代且有序的数据类型,元素可通过索引访问。常见的序列类型包括列表(list)、元组(tuple)、字符串(str)和范围(range)。

1.1核心特征

 有序 集合,元素通过 整数索引 访问(从0开始)。元素可以重复。

1.2关键点

  1. 顺序重要: 元素的位置(索引)是确定的。
  2. 索引访问: 使用 [index] 来获取特定位置的元素。
  3. 切片操作: 支持切片 [start:stop:step] 来获取子序列。
  4. 可迭代: 可以使用 for 循环遍历所有元素。
  5. 长度: 使用 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 关键点

  1. 键的唯一性: 在一个映射中,键必须是唯一的。如果添加已存在的键,会覆盖旧值。
  2. 键不可变性: 键必须是不可变类型(如 strintfloattuple),因为需要计算哈希值。值可以是任意类型。
  3. 无序性 (Python 3.6及之前): 标准字典 (dict) 在Python 3.6及之前版本中不保证元素的存储和遍历顺序(虽然实现细节可能按插入顺序,但不能依赖)。Python 3.7+ 官方保证 dict 保留元素插入顺序。 但这主要是一个实现保证,映射的核心抽象仍是基于键访问,而非顺序。
  4. 可变性: 主要的映射类型 dict 是可变的,可以动态添加、删除、修改键值对。
  5. 高效查找: 基于哈希表实现,通过键查找值的速度非常快(接近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'  # 新增键值对
 

业余了解

  1. collections.defaultdict: 提供默认值的字典,访问不存在的键时返回指定的默认值。
  2. collections.ChainMap: 将多个映射链接成一个视图。
  3. types.MappingProxyType: 创建字典的只读视图(不可变)。

3.集合类型 (Set Types)

3.1核心特征

存储 唯一、无序 元素集合。主要用于成员关系测试(检查元素是否存在)、消除重复项以及进行数学集合运算(并、交、差、对称差)。

3.2关键点

  1. 元素唯一性: 集合中不允许有重复的元素。添加重复元素会被自动忽略。
  2. 无序性: 集合中的元素没有固定顺序。不能通过索引访问元素(因为没有索引的概念)。遍历或打印的顺序可能与插入顺序不同。
  3. 元素不可变性: 集合的元素本身必须是不可变类型(哈希类型),例如 intfloatstrtuple。不能包含可变元素如 listdict 或其他集合(但 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的主要区别:

特性setfrozenset
可变性可变(可修改)不可变(不能修改)
创建语法{元素} 或 set(iterable)frozenset(iterable)
作为字典键不支持支持
内存开销略高(因动态调整)略低(固定大小)
典型用例动态数据管理静态数据存储或哈希键

总结

特性序列 (Sequence)映射 (Mapping)集合 (Set)
核心元素有序的元素键值对 (key: value)唯一的元素
访问方式整数索引 ([index])键 ([key])无法索引 (无序)
顺序有序 (位置重要)Python 3.7+ 有序 (保留插入顺序),但核心抽象是键访问无序
元素唯一性元素可以重复键必须唯一元素必须唯一
元素要求任意类型 (通常一致)键:不可变类型
值:任意类型
元素:不可变类型
可变性有可变(list)和不可变(tuplestr)主要可变(dict) 有不可变视图有可变(set)和不可变(frozenset)
主要用途存储有序数据列表存储关联数据 (键找值)成员检查、去重、集合运算
典型代表listtuplestrdict

了解了它们的区别与特点更有利于我们去学习与掌握。

您可能感兴趣的与本文相关的镜像

Python3.8

Python3.8

Conda
Python

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值