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 禁止用于未知外部输入。
相关推荐
qeen871 小时前
【C++】类与对象之类的默认成员函数(二)
android·c语言·开发语言·c++·笔记·学习
CRMEB系统商城2 小时前
CRMEB多商户系统(Java)v2.3公测版发布
java·开发语言·人工智能·小程序·开源·php
Samooyou2 小时前
RAG项目案例--02在线检索&过滤流水线
人工智能·python·ai·全文检索·检索
动能小子ohhh2 小时前
DocForge平台的设计与开发--文件上传接口的实现
开发语言·人工智能·python·langchain·ocr·fastapi
满天星83035772 小时前
【Qt】信号和槽(二) (自定义信号和槽)
开发语言·数据库·qt
ab_dg_dp2 小时前
Android 17+ 提取 AIDL 生成 Java 文件的实用脚本
android·java·python
超哥--2 小时前
B站视频内容智能分析系统(三):B站视频自动采集
java·开发语言·音视频·ai编程
夏语灬2 小时前
cryptography:Python 密码学标准库的终极选择
开发语言·python·密码学
Jun6263 小时前
QT(19)-VISA控制仪器
开发语言·qt