python内置数据结构-bytes、bytearray

本文介绍Python3中的bytes和bytearray两种字节序列类型。详细解释了它们的定义、创建方式及常见操作方法,并对比了两者之间的区别。

bytes、bytearray

python3中引入的两个新类型
bytes:是字节组成的有序的不可变字节序列
bytearray:是字节组成的有序的可变序列

编码与解码:
1.字符串按照不同的字符集编码encode返回直接序列butes
encode(encoding=‘utf-8’,errors=‘strict’)->butes
2.字节序列按照不同的字符集解码decode返回字符串
bytes.encode(encoding=‘utf-8’,errors=‘strict’)->butes
butearray.encode(encoding=‘utf-8’,errors=‘strict’)->butes

熟记ASCII
\t \r \n
0-9
A-Z
a-z

bytes定义

1.bytes() 空bytes
2.bytes(int)指定字节的bytes,被0填充
3.bytes(iterable_of_ints)->bytes[0,255]的int组成的可迭代对象
4.bytes(string,encoding[,errors])->bytes等价于string.encode()
5.bytes(bytes_or_buffer)->immutable copy of bytes_or_buffer从一个字节序列或者buffer复制处一个不可变的bytes对象
6.使用b前缀定义
只允许基本ASCII使用字符b’abc’
使用16进制表示b"\x41\x61"

bytes操作
1.和syr类型类似,都是不可变类型,所以方法很多都一样。bytes,输入是bytes,输出是bytes
b’abcdef’.replace(b’f’,b’k’)
b’abc’.find(b’b’)
2.类方法bytes.fromhex(string)
string必须是2个字符的16进制的形式,‘6162 41 42’,空格将被忽略
bytes.fromhex(‘6162 09 6a 6b00’)
3.hex():返回16进制表示的字符串
‘abc’.encode().hex()
4.索引:返回int类型
b’abcdef’[2]返回该字节对应的数,int类型

bytearray定义

1.bytearray() 空bytearray
2.bytearray(int)指定字节的bytearray,被0填充
3.bytearray(iterable_of_ints)->bytearray[0,255]的int组成的可迭代对象
4.bytearray(string,encoding[,errors])->bytearray等价于string.encode(),返回可变对象
5.bytearray(bytes_or_buffer)->immutable copy of bytearray_or_buffer从一个字节序列或者buffer复制处一个不可变的bytes对象
6.使用bytearray前缀定义
只允许基本ASCII使用字符b’abc’
使用16进制表示b"\x41\x61"

bytearray操作
1.和bytes类型的方法相同
bytearray’abcdef’.replace(b’f’,b’k’)
bytearray’abc’.find(b’b’)
2.类方法bytearray.fromhex(string)
string必须是2个字符的16进制的形式,‘6162 41 42’,空格将被忽略
bytearray.fromhex(‘6162 09 6a 6b00’)
3.hex():返回16进制表示的字符串
bytearray(‘abc’.encode()).hex()
4.索引:返回int类型 b = bytearray() b.append()
bytearray’abcdef’[2]返回该字节对应的数,int类型
5.append(int)尾部追加一个元素 b.append(65)
6.insert(index,int)在指定索引位置插入元素 b.insert(1,98)
7.extend(iterable_of_ints)将一个可迭代的整数集合追加到当前bytearray b.extend([65,66,67])
8.pop(index=-1)从指定索引上移除元素,默认从尾部移除 b.pop()
9.remove(value)找到第一个value移除,找不到抛异常 b.remove(66)
10.clear()清空bytearray b.reverse()
11.reverse()翻转bytearry,就地修改 b.clear()
上述方法若使用int类型,值在[0,255]

int和bytes
1.int.from_bytes(bytes,byteorder)
将一个字节数组表示成整数
2.int.to_bytes(lenth,byteorder)
byteorder字节序
将一个整数表达成一个指定长度的字节数组

i = int.form_bytes(b’abc’,‘big’)
print(i,hex(i)) #6382179 0x616263
print(i.to_bytes(3,‘big’)) #b’abc’

字节序:

大端模式 big-endian :尾巴放在大地址端,就是大端模式
MSB:Most Significant Bit,最高有效位
小端模式 little-endian : 尾巴放在低地址端,就是小端模式
LSB:Least Significant Bit,最低有效位

Intel X86 CPU使用小端模式
网络传输更多使用大端模式
Windows、Linux使用小端模式
Mac OS、Java虚拟机使用大端模式

<think>好的,用户想了解Python数据结构。首先,我需要回忆Python中常用的内置数据结构。记得有列表、元组、字典、集合这些基本结构,可能还有字符串,不过字符串属于不可变序列。另外,Python 3.7之后字典是有序的,这点可能需要提到。 接下来,用户可能想知道每种结构的特点和用途。比如列表是可变的有序集合,元组是不可变的。字典是键值对,集合用于存储唯一元素。需要分点说明,结构清晰。 还要考虑高级数据结构,比如collections模块里的namedtuple、deque、Counter等,这些虽然不是内置,但很常用。可能用户也需要了解这些扩展类型。 是否需要提到堆?虽然heapq模块属于标准库,但堆的实现可能需要说明。此外,像数组模块或者bytesbytearray这些二进制类型是否算数据结构呢?可能用户更关注常用的,所以暂时先重点介绍基本和collections里的结构。 用户可能的背景是什么?如果是初学者,应该用简单例子说明。比如列表用方括号,元组用圆括号,字典用花括号。还要比较它们的异同,比如列表和元组的可变性差异。 是否需要提醒性能特点?比如列表的append和insert的时间复杂度,字典的查找速度。这些对实际应用很重要,但用户如果没有特别提到性能需求,可能简要带过。 还要注意用户的问题是否包括数据结构的操作,比如添加、删除元素的方法。可能需要给出基本操作的例子,但根据问题描述,用户可能只需要介绍结构,而不是详细操作步骤。 有没有可能用户问的是更广义的数据结构,比如栈、队列,虽然Python没有内置,但可以用列表或deque实现。这点可能需要提及,说明如何用现有结构实现其他抽象数据类型。 最后要确保回答结构清晰,分点列出,每种结构给出定义、特点、使用场景和示例。检查是否有遗漏,比如frozenset这样的不可变集合,或者bytesbytearray是否值得提及。可能用户只需要主要结构,所以先覆盖基础,再补充高级部分。</think>Python内置了多种高效的数据结构,以下是核心数据结构的分类介绍: ### 一、基础数据结构 1. **列表(List)** - 定义:`[1, 2, 3]` - 特点:有序、可变、可重复 - 操作复杂度示例: $$O(1)\text{ 索引访问},\quad O(n)\text{ 插入/删除}$$ 2. **元组(Tuple)** - 定义:`(1, 'a', True)` - 特点:有序、不可变、可哈希 - 典型应用:坐标存储、数据库记录 3. **字典(Dict)** - 定义:`{'key': value}` - 特点:键值映射、无序(Python 3.7+有序)、哈希表实现 - 查找效率: $$O(1)\text{ 平均时间复杂度}$$ 4. **集合(Set)** - 定义:`{1, 2, 3}` - 特点:无序、唯一元素、哈希实现 - 运算示例: $$A \cap B \quad \text{交集},\quad A \cup B \quad \text{并集}$$ ### 二、高级扩展结构 1. **collections模块** - `deque`:双端队列,支持$O(1)$首尾操作 - `Counter`:元素计数工具,`Counter('abracadabra')` - `defaultdict`:自动初始化字典,`defaultdict(int)` 2. **堆队列(heapq)** - 实现最小堆结构 - 典型操作: ```python import heapq heapq.heappush(heap, item) ``` 3. **数组(array模块)** - 内存紧凑的数值数组 - 示例: ```python import array arr = array.array('i', [1,2,3]) ``` ### 三、特殊序列类型 1. **字符串(str)** - 不可变Unicode序列 - 支持切片操作:`"Python"[1:3] → 'yt'` 2. **字节序列(bytes)** - 不可变二进制数据:`b'ABC'` 3. **字节数组(bytearray)** - 可变的bytes版本:`bytearray(b'Hello')` ### 四、选择建议 | 需求场景 | 推荐结构 | 优势 | |----------|----------|------| | 快速查找 | 字典 | 哈希表直接寻址 | | 元素去重 | 集合 | 自动过滤重复 | | 后进先出 | deque | 线程安全队列 | | 数学运算 | NumPy数组 | 矢量化操作 | 实际开发中建议: 1. 优先使用基础结构 2. 大数据量时考虑内存效率 3. 复杂关系使用组合结构(如字典嵌套列表)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值