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. 特殊转换 :frozenset、eval、repr(特定场景)

2. 常用场景选型

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

3. 常见限制避坑

  1. 集合、字典不能被哈希的类型无法互相随意转换;
  2. dict() 仅支持键值对格式的可迭代对象;
  3. 编码和解码必须使用同一种编码格式;
  4. eval 禁止用于未知外部输入。
相关推荐
进击的明明7 小时前
当AI开始“边想边干”:深入聊聊ReAct,以及如何用Python手搓一个简单Agent
python·面试·agent
全栈弄潮儿8 小时前
Python实战第8期:函数
后端·python·编程语言
卷无止境10 小时前
暗流与破局:AI时代的代码安全审查工具全景指南
后端·python
卷无止境12 小时前
一人公司的全栈选型指南:让 AI Agent 写得快,也让生意跑得稳
后端·python
WJ.Polar14 小时前
Java封装、继承、多态
java·开发语言
摇滚侠14 小时前
Java 中如何表示负数,有符号和无符号的区别,补码的计算规则,char byte short int long 的范围
java·开发语言
滴啦嘟啦哒14 小时前
【具身笔记】【π0.5 微调与仿真】五、在MuJoCo中实现可视化仿真
笔记·python·vla·具身
weixin_3077791314 小时前
C++代码实现MATLAB中的fitrtree函数功能
开发语言·c++·算法·matlab
Uncertainty!!14 小时前
Windows 10 与 Ubuntu 22.04 通过 Samba 共享文件夹
windows·ubuntu·共享文件夹
全栈练习生15 小时前
AI安全与红队测试
python·ai