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

如何合并列表中前缀子串匹配的Cell项并累加末尾数值

实现方案

核心思路

这类按前缀聚合累加的需求,更适合先用字典做中间状态存储,再通过列表推导式生成最终格式的结果。不推荐强行用单条列表推导式完成全流程,因为聚合操作需要依赖累加的中间状态,硬凑的写法可读性会非常差。

分步实现代码

  1. 导入依赖(用defaultdict简化累加逻辑)
from collections import defaultdict
  1. 定义你的原始列表
raw_list = ["<Cell R105C123 1>", "<Cell R27C123 8>", "<Cell R139C115 1>", "<Cell R139C115 1>", "<Cell R19C111 2>", "<Cell R19C119 2>", "<Cell R66C127 0.5>", "<Cell R66C127 1>"]
  1. 用字典做前缀聚合累加
prefix_sum = defaultdict(float)
for item in raw_list:
    # 从右往左按空格拆分1次,避免前缀里有空格的异常情况
    content = item.strip("<>").rsplit(" ", 1)
    prefix = content[0]
    num = float(content[1])
    prefix_sum[prefix] += num
  1. 用列表推导式生成最终结果
result = [f"<{prefix} {value}>" for prefix, value in prefix_sum.items()]

输出验证

以上代码运行后,result的内容如下,符合合并要求:

['<Cell R105C123 1.0>', '<Cell R27C123 8.0>', '<Cell R139C115 2.0>', '<Cell R19C111 2.0>', '<Cell R19C119 2.0>', '<Cell R66C127 1.5>']

如果不需要保留浮点数的.0后缀,可以把生成结果的代码调整为判断数值类型再格式化:

result = []
for prefix, value in prefix_sum.items():
    formatted_val = int(value) if value.is_integer() else value
    result.append(f"<{prefix} {formatted_val}>")

单条列表推导式实现(不推荐)

如果一定要用单条列表推导式完成,可以借助临时字典实现,但是可读性极低,仅做参考:

tmp_dict = defaultdict(float)
result = [f"<{k} {v}>" for k, v in tmp_dict.items() for item in raw_list if not tmp_dict.update({item.strip("<>").rsplit(" ",1)[0]: tmp_dict.get(item.strip("<>").rsplit(" ",1)[0],0) + float(item.strip("<>").rsplit(" ",1)[1])})][0]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 20:36:05