如何对同列表内两个子列表对应位置数值求和、字符串拼接合并
可行实现方案
当然有可行方案,针对这类固定结构的二维识别结果数组(子列表固定为[x坐标, y坐标, 文本块宽度, 文本块高度, 识别文本]格式),按索引对位匹配元素,判断类型后执行对应运算就能得到预期结果。
可直接运行的代码
array = [[1676, 196, 159, 29, 'invoice'], [1857, 198, 108, 28, 'date:']] block_a, block_b = array merged_result = [] for index, (item_a, item_b) in enumerate(zip(block_a, block_b)): # 前两位是坐标,取两个块里最靠左、最靠上的最小值当合并块的基准坐标 if index in (0, 1): merged_result.append(min(item_a, item_b)) # 宽高位是数值,直接求和 elif isinstance(item_a, (int, float)) and isinstance(item_b, (int, float)): merged_result.append(item_a + item_b) # 文本位是字符串,拼接时空格分隔 elif isinstance(item_a, str) and isinstance(item_b, str): merged_result.append(f"{item_a} {item_b}".strip()) print(merged_result) # 运行输出:[1676, 196, 267, 57, 'invoice date:'],和要求的结果完全一致
补充说明
- 整个实现用Python原生语法就能写,不需要装任何第三方依赖
- 逻辑通用性很强,如果后续要合并更多同结构的子列表,只需要把遍历逻辑改成逐对累积计算就行
- 代码里的坐标取最小值分支是为了匹配给出的预期结果加的业务规则,如果要严格执行“所有数值位相加、所有字符串位拼接”的规则,删掉索引判断的分支,统一对数值做加法、字符串做拼接即可。
内容的提问来源于stack exchange,提问作者Manu Raj
相关产品推荐
相关产品推荐

