基于索引偏移的列表操作实现(不使用Pandas)
不使用Pandas实现列表映射需求
给定两个列表:
A = ["apple","cherry","pear","mango","banana","grape","kiwi","orange","pineapple"] B = [{"offset":0, "xx":789},{"offset":3, "xx":921},{"offset":6, "xx":89}]
需求是生成结果列表C,其中每个元素的xx值遵循规则:B中元素的offset作为起始索引,该索引及之后的所有元素xx值都会被当前元素的xx覆盖(后出现的offset优先级更高),最终得到预期结构的C。
实现代码
A = ["apple","cherry","pear","mango","banana","grape","kiwi","orange","pineapple"] B = [{"offset":0, "xx":789},{"offset":3, "xx":921},{"offset":6, "xx":89}] # 确保B按offset升序排列,避免无序导致覆盖逻辑错误 B_sorted = sorted(B, key=lambda x: x['offset']) # 初始化xx值数组,默认填充第一个offset对应的xx xx_values = [B_sorted[0]['xx']] * len(A) # 遍历后续offset,更新对应区间的xx值 for item in B_sorted[1:]: offset = item['offset'] xx = item['xx'] # 从offset位置开始到末尾,替换为当前xx值 xx_values[offset:] = [xx] * (len(A) - offset) # 组合生成结果列表C C = [{"fruit": fruit, "xx": xx} for fruit, xx in zip(A, xx_values)] # 验证结果 for entry in C: print(entry)
代码说明
- 排序B列表:先对B按
offset升序排序,保证处理顺序是从低索引到高索引,确保后出现的offset能正确覆盖前面的xx值。 - 初始化xx数组:创建和A长度一致的数组,先填充第一个offset对应的xx值作为初始值。
- 更新xx值:逐个处理B中的后续元素,从指定offset开始,将数组该位置及之后的所有值替换为当前元素的xx。
- 生成结果C:通过列表推导式将A中的水果名称和对应的xx值组合成字典,得到最终的C列表。
内容的提问来源于stack exchange,提问作者JK2018
相关产品推荐
相关产品推荐

