You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python 如何展开列表中字符串形式的嵌套元组得到扁平元组列表

扁平元组列表实现方案

针对列表中「月份字符串 + 字符串格式元组」的嵌套结构,可通过两类高容错方案完成拆解,输出完全匹配目标要求:

方法1:正则提取法(高容错,适配格式异常场景)

该方案不需要将字符串解析为合法Python对象,直接提取需要的数值片段,可自动适配示例中出现的多余引号等格式错误,无代码执行安全风险。
实现代码:

import re

# 原始输入列表
lista = [
    ('Enero', "('90.0', '229.0', '0.264', '0.672')"),
    ('Febrero', "('76.0', '262.0', '0.247', '0.821'')"),
    ('Marzo', "('95.0', '133.0', '0.279', '0.390')"),
]

result = []
for month, data_str in lista:
    # 匹配所有被单引号包裹的数值内容,自动忽略冗余符号
    values = re.findall(r"'([^']+)'", data_str)
    # 解包拼接为扁平元组
    result.append((month, *values))

print(result)

运行输出完全匹配预期:

[
  ('Enero', '90.0', '229.0', '0.264', '0.672'),
  ('Febrero', '76.0', '262.0', '0.247', '0.821'),
  ('Marzo', '95.0', '133.0', '0.279', '0.390')
]

方法2:安全语法解析法(适配规范格式场景)

如果字符串形式的元组完全符合Python语法规则,没有格式错误,可以使用标准库ast的字面量解析方法完成转换,比直接使用eval安全(不会执行字符串中的恶意代码)。
实现代码:

import ast

lista = [
    ('Enero', "('90.0', '229.0', '0.264', '0.672')"),
    ('Febrero', "('76.0', '262.0', '0.247', '0.821'')"),
    ('Marzo', "('95.0', '133.0', '0.279', '0.390')"),
]

result = []
for month, data_str in lista:
    # 预处理修正示例中的多余双单引号格式问题
    fixed_str = data_str.replace("''", "'")
    # 将字符串形式的元组解析为真实元组对象
    parsed_data = ast.literal_eval(fixed_str)
    # 拼接为扁平元组
    result.append((month, *parsed_data))

方案选择提示

  • 数据来源不可靠、可能存在格式错误时优先选正则提取法,不需要逐行修正语法错误
  • 数据完全规范、追求解析逻辑严谨性时选安全语法解析法,避免字符串匹配的漏判问题

内容的提问来源于stack exchange,提问作者Une

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.27 08:15:07