如何使用Python将混合类型3D列表字符串转换为3D列表对象
混合类型3D列表字符串格式转换方案
问题说明
待处理的原始列表字符串:
l_string = """[[-0.5, '#572fa5', 1], [-0.25, "#70339b", 1], [0.2, "#883691", 0.3], [0.5, "#b83d7e", 1], ["#e9446a", 1]]"""
目标转换结果:修正最后一个子列表的元素顺序,得到结构统一的3D列表:
l = [[-0.5, '#572fa5', 1], [-0.25, "#70339b", 1], [0.2, "#883691", 0.3], [0.5, "#b83d7e", 1], [1, "#e9446a", 1]]
实现步骤
- 用Python标准库
ast的literal_eval方法安全解析字符串为原生列表,避免直接用eval带来的代码执行安全风险 - 遍历解析后的所有子列表,对长度不符合3个元素的异常项做结构调整:观察所有正常子列表统一为「位置数值、十六进制色值、透明度数值」的结构,最后一个异常子列表仅包含色值和透明度,直接将透明度值移到子列表首位即可补全结构
完整代码
import ast l_string = """[[-0.5, '#572fa5', 1], [-0.25, "#70339b", 1], [0.2, "#883691", 0.3], [0.5, "#b83d7e", 1], ["#e9446a", 1]]""" parsed = ast.literal_eval(l_string) res = [] for item in parsed: if len(item) == 3: res.append(item) else: # 异常项结构为[色值, 透明度],调整为[透明度, 色值, 透明度]匹配统一结构 color, alpha = item res.append([alpha, color, alpha]) # 输出验证 print(res)
运行验证
执行代码后输出结果和目标完全匹配:
[[-0.5, '#572fa5', 1], [-0.25, '#70339b', 1], [0.2, '#883691', 0.3], [0.5, '#b83d7e', 1], [1, '#e9446a', 1]]
提示:如果后续需要适配更多异常结构,可以把识别
#开头的十六进制色值作为锚点,自动调整其余数值的位置,不需要写死长度判断,适配性更强。
内容的提问来源于stack exchange,提问作者Alex_rdq
相关产品推荐
相关产品推荐

