Python中如何将字符串形式的列表转换为原生列表类型
问题说明
现有以字符串格式存储的列表变量:emp_id = "['1406','41232']"
需求是将其转换为Python原生列表类型 ['1406','41232']。
使用如下代码尝试转换时:
emp_id = emp_id.strip('][').split(", ")
得到的输出为 ["'1406'","'41232'"],每个元素外层残留了多余的单引号,不符合预期。
可行转换方案
方案1:使用ast.literal_eval(优先推荐)
Python标准库ast提供的literal_eval方法可以安全解析字符串形式的Python原生字面量(列表、字典、字符串、数字等),不需要手动处理字符串切割、引号剔除的逻辑,适配各种合法的列表格式,不会出现引号残留问题:
import ast emp_id = "['1406','41232']" emp_id = ast.literal_eval(emp_id)
执行后emp_id的值为['1406', '41232'],完全符合预期。
注意:禁止直接使用内置
eval()方法做这类转换。eval会执行字符串内的任意可执行代码,如果字符串来源不可控,会触发任意代码执行的严重安全漏洞。
方案2:修正手动字符串处理逻辑
如果不想导入标准库模块,可以在原有切割逻辑的基础上,对分割后的每个元素做首尾单引号剔除:
emp_id = "['1406','41232']" emp_id = [item.strip("'") for item in emp_id.strip('][').split(", ")]
该方案仅适用于列表元素本身不包含逗号、单引号的简单场景,如果元素内容包含上述特殊字符,手动切割的逻辑会出现解析错误,通用性远低于ast.literal_eval方案。
内容的提问来源于stack exchange,提问作者Ibrahim Khan
相关产品推荐
相关产品推荐

