Python 还有容器类型互转、进制转换、字符编码转换

一、容器类型互相转换(高频常用)

包含 列表(list)、元组(tuple)、集合(set)、字典(dict) 之间的转换,是日常编码、数据去重、格式改造的常用操作。

1. list() 转为列表

可迭代对象(字符串、元组、集合、字典等)转成列表。

python 复制代码
# 1. 字符串 → 列表(逐个字符拆分)
s = "python"
print(list(s))  # ['p', 'y', 't', 'h', 'o', 'n']

# 2. 元组 → 列表
t = (1, 2, 3)
print(list(t))  # [1, 2, 3]

# 3. 集合 → 列表(无序,集合本身不保证顺序)
se = {4, 5, 6}
print(list(se))

# 4. 字典 → 列表:只提取【键】
d = {"name": "小明", "age": 20}
print(list(d))  # ['name', 'age']

2. tuple() 转为元组

用法和 list() 一致,接收可迭代对象,转为不可变元组

python 复制代码
# 列表 → 元组
lst = [10, 20, 30]
print(tuple(lst))  # (10, 20, 30)

# 字符串 → 元组
print(tuple("abc"))  # ('a', 'b', 'c')

3. set() 转为集合

核心作用:自动去重 + 无序 ,常用于数据去重。

⚠️ 注意:集合元素必须是不可变类型,列表不能作为集合元素。

python 复制代码
# 列表 → 集合(自动去重)
lst = [1, 2, 2, 3, 3]
print(set(lst))  # {1, 2, 3}

# 字符串 → 集合(字符去重)
print(set("aabbcc"))  # {'a', 'b', 'c'}

# 元组 → 集合
t = (5, 5, 6)
print(set(t))

4. dict() 转为字典

要求比较严格,只能接收特定格式的可迭代对象

  • 嵌套序列:[(键1,值1), (键2,值2)]
  • 关键字参数形式
python 复制代码
# 1. 嵌套列表/元组 → 字典(最常用)
data = [("name", "小红"), ("age", 18)]
print(dict(data))  # {'name': '小红', 'age': 18}

# 2. 关键字参数写法
print(dict(name="小李", age=22))

# 错误示范:普通列表/字符串无法直接转字典
# dict([1,2,3])  报错

二、进制转换(数字专属,开发/运维常用)

针对十进制整数,转为 二进制、八进制、十六进制,也支持反向转换。

1. 十进制 → 其他进制(返回字符串)

python 复制代码
num = 10

# bin() 十进制 → 二进制,前缀 0b
print(bin(num))   # '0b1010'

# oct() 十进制 → 八进制,前缀 0o
print(oct(num))   # '0o12'

# hex() 十进制 → 十六进制,前缀 0x
print(hex(num))   # '0xa'

2. 其他进制 → 十进制(用 int() 扩展用法)

int(字符串, 进制),第二个参数指定原数字的进制:

python 复制代码
# 二进制字符串 → 十进制
print(int("1010", 2))   # 10

# 八进制字符串 → 十进制
print(int("12", 8))     # 10

# 十六进制字符串 → 十进制
print(int("a", 16))     # 10

三、字符与编码转换(网络、文件、爬虫必备)

处理中文、网络传输、文件读写时高频使用,核心是 encode() / decode()

核心概念

  • 字符串(str):人类可读文本
  • 字节串(bytes):计算机底层二进制数据(网络/文件传输标准格式)

1. str → bytes 编码 encode()

python 复制代码
text = "你好Python"
# 常用编码:utf-8、gbk
b = text.encode("utf-8")
print(b)  # b'\xe4\xbd\xa0\xe5\xa5\xbdPython' (bytes 类型)

2. bytes → str 解码 decode()

python 复制代码
# 用对应编码解码,编码不一致会乱码/报错
s = b'\xe4\xbd\xa0\xe5\xa5\xbdPython'.decode("utf-8")
print(s)  # 你好Python

补充:也可以用 bytes() 构造字节串,用法受限,日常优先 encode


四、其他小众/高阶转换

1. frozenset() 转为不可变集合

普通集合 set 是可变的,frozenset 生成只读集合,不能增删元素,可作为字典的键。

python 复制代码
lst = [1, 2, 2]
fs = frozenset(lst)
print(fs)  # frozenset({1, 2})
# fs.add(3)  报错:不可修改

2. eval() 字符串转表达式/对象(慎用)

格式合法的字符串,还原成对应的 Python 对象/执行表达式。

示例

python 复制代码
# 字符串格式列表 → 真实列表
str_lst = "[1, 2, 3]"
lst = eval(str_lst)
print(lst, type(lst))  # [1, 2, 3] <class 'list'>

# 字符串格式字典 → 真实字典
str_dic = '{"name": "张三"}'
dic = eval(str_dic)
print(dic)

# 执行数学表达式
print(eval("1 + 2 * 3"))  # 7

⚠️ 重大风险eval 会执行任意代码,绝对不要处理外部用户输入,容易被注入恶意代码。

3. repr() 规范字符串表示

将对象转为官方格式字符串 ,和 str() 区别:str 面向用户,repr 面向开发者、调试。

python 复制代码
s = "hello"
print(str(s))   # hello
print(repr(s))  # 'hello' (保留引号)

五、转换关系总览 & 实用总结

1. 分类速记

  1. 基础类型int/float/str/bool(入门必学)
  2. 容器互转list/tuple/set/dict(数据处理主力)
  3. 进制转换bin/oct/hex + 带参数 int(底层、算法、运维)
  4. 编码转换encode/decode(爬虫、文件、网络)
  5. 特殊转换frozensetevalrepr(特定场景)

2. 常用场景选型

  • 数据去重:listset
  • 保护数据不被修改:listtuple
  • 二维列表转字典:dict()
  • 进制换算:bin/oct/hex
  • 网络/文件传中文:encode/decode
  • 字符串还原为列表/字典(可信数据):eval

3. 常见限制避坑

  1. 集合、字典不能被哈希的类型无法互相随意转换;
  2. dict() 仅支持键值对格式的可迭代对象;
  3. 编码和解码必须使用同一种编码格式
  4. eval 禁止用于未知外部输入。
相关推荐
花酒锄作田7 小时前
Pydantic校验配置文件
python
hboot7 小时前
AI工程师第四课 - 深度学习入门
pytorch·python·神经网络
ZhengEnCi18 小时前
P2M-Matplotlib折线图完全指南-从数据可视化到趋势分析的Python绘图利器
python·matlab·数据可视化
ZhengEnCi19 小时前
P2L-Matplotlib饼图完全指南-从数据可视化到图表定制的Python绘图利器
python·matlab
曲幽19 小时前
你的REST接口还在“过度投喂”数据吗?——FastAPI + GraphQL实战避坑指南
python·fastapi·web·graphql·route·cors·rest·strawberry
用户83580861879121 小时前
基于 Self-RAG 与列表级重排序的进阶 RAG 系统设计与实现
python
Warson_L2 天前
Python `Annotated` 与 LangGraph Reducer 学习笔记
python
韩师傅2 天前
海天线算法的前世今生
python·计算机视觉
韩师傅2 天前
当你的甲方设备过烂,要如何快速出效果?
python·计算机视觉
Warson_L2 天前
LangGraph的MessageState and HumanMessage
python