一、容器类型互相转换(高频常用)
包含 列表(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. 分类速记
- 基础类型 :
int/float/str/bool(入门必学) - 容器互转 :
list/tuple/set/dict(数据处理主力) - 进制转换 :
bin/oct/hex+ 带参数int(底层、算法、运维) - 编码转换 :
encode/decode(爬虫、文件、网络) - 特殊转换 :
frozenset、eval、repr(特定场景)
2. 常用场景选型
- 数据去重:
list→set - 保护数据不被修改:
list→tuple - 二维列表转字典:
dict() - 进制换算:
bin/oct/hex - 网络/文件传中文:
encode/decode - 字符串还原为列表/字典(可信数据):
eval
3. 常见限制避坑
- 集合、字典不能被哈希的类型无法互相随意转换;
dict()仅支持键值对格式的可迭代对象;- 编码和解码必须使用同一种编码格式;
eval禁止用于未知外部输入。