如何按指定规则编辑双元素嵌套列表?
实现思路
给你捋一下这个需求的实现思路,全程不用字典这类结构,纯靠列表操作就能搞定:
第一步:拆分每个条目,提取主体和数值
先给每个条目做拆分,把「描述主体」和「结尾的数值(如果有)」分开:
- 比如 "Apple 1" 拆成主体"Apple"、数值1;"iced tea 1,5" 拆成主体"iced tea"、数值1.5(注意把逗号换成点转成浮点数方便计算)
- 像 "onions" 这种没有结尾数值的,就标记为非数值型条目
具体可以用正则表达式匹配,比如用模式 ^(.*?)\s*([\d,]+)$,这个模式能精准捕获前面的描述部分和后面的数值部分。如果匹配失败,就说明该条目没有结尾数值。
第二步:用列表分组统计,不借助字典
初始化一个空的临时列表存分组信息,每个分组可以设为 [category, 主体, 数值总和](非数值型的话数值总和设为None就行)。接着遍历原始列表的每一项:
- 先拆分当前项的category、主体、数值(或非数值标记)
- 遍历临时分组列表,查找是否存在同category且同主体的分组:
- 找到的话:如果当前条目是数值型,就把数值加到该分组的总和里;非数值型的话直接跳过(因为重复条目只留一个)
- 没找到的话:就把当前的category、主体、数值(或标记)作为新分组加入临时列表
第三步:组装成目标格式的嵌套列表
遍历临时分组列表,把每个分组转换成要求的格式:
- 数值型分组:把主体和求和后的数值拼接,注意如果是小数,要把点换回逗号(比如3.5转成"3,5"),比如用
f"{主体} {总和}".replace('.', ',')的方式处理 - 非数值型分组:直接用主体作为条目内容
- 最后把每个分组组装成
[category, 新条目],加入结果列表
拿示例输入来说:
- 三个"Apple"条目数值求和1+2+5=8,变成
["fruits", "Apple 8"] - 两个"iced tea"条目求和1.5+2=3.5,转成
["cooled", "iced tea 3,5"] - 三个"onions"只保留一个,"Pizza"直接原样保留
这样处理完就完全符合要求,全程只用列表操作,没用到字典等其他数据结构。
内容的提问来源于stack exchange,提问作者Fichel
相关产品推荐
相关产品推荐

