如何在J语言中拆解长度各异的装箱列表构成的列表?
合并长度各异的装箱列表并避免末尾零
问题描述
现有一组长度各异的装箱列表,格式如下:
┌──────────────┬───────────┬─────┬───┐ │0 2 3 4 7 9 11│9 7 4 3 2 1│1 2 3│3 1│ └──────────────┴───────────┴─────┴───┘
需要合并为单个无额外末尾零的列表:
0 2 3 4 7 9 11 9 7 4 3 2 1 1 2 3 3 1
但合并操作时总会在末尾出现填充的零,需解决该问题。
原因分析
末尾出现零的核心原因是:装箱列表通常以固定长度数组存储,短列表会在末尾补零填充,合并时误将这些填充零当作有效元素加入。
解决方案
核心思路是提取每个子列表的有效元素部分(剔除末尾填充的零),再拼接所有有效部分。以下以Python为例实现:
示例代码
假设原始装箱数据为固定长度数组(短列表补零):
# 模拟装箱后的固定长度数组 boxed_lists = [ [0, 2, 3, 4, 7, 9, 11], [9, 7, 4, 3, 2, 1, 0], [1, 2, 3, 0, 0, 0, 0], [3, 1, 0, 0, 0, 0, 0] ] def extract_valid_elements(lst): # 从后往前定位第一个非零元素,截取有效部分 for idx in reversed(range(len(lst))): if lst[idx] != 0: return lst[:idx+1] return [] # 处理全零的极端情况 # 合并所有有效子列表 merged_list = [] for sub_list in boxed_lists: merged_list.extend(extract_valid_elements(sub_list)) # 输出目标格式结果 print(' '.join(map(str, merged_list)))
代码说明
extract_valid_elements函数:通过反向遍历找到子列表中最后一个非零元素的位置,截取该位置之前的所有元素,确保只保留原始有效数据,剔除末尾填充的零。- 遍历所有装箱子列表,将每个子列表的有效部分依次加入合并列表。
- 最终输出的结果即为无填充零的目标列表。
内容的提问来源于stack exchange,提问作者Gregory Higley
相关产品推荐
相关产品推荐

