嵌套列表相邻元素modulo减法求和及相邻校验实现方法
嵌套列表相邻元素绝对值差求和实现方案
核心逻辑说明
我们需要实现三个核心能力:指定位置元素取值、相邻关系校验、绝对值差累加,以下是具体实现方法。
代码实现(Python)
场景1:原列表未被打乱,顺序为原始存储顺序
def calc_adjacent_abs_sum(nested_list, target_index): total = 0 # 按步长2遍历,匹配示例中每两个相邻子列表为一组的逻辑 for i in range(0, len(nested_list), 2): # 校验下一个子列表存在,避免索引越界 if i + 1 >= len(nested_list): break # 相邻关系校验:两个子列表在原列表的索引差为1 if (i + 1) - i != 1: continue # 取指定位置元素计算绝对值差并累加 val_a = nested_list[i][target_index] val_b = nested_list[i+1][target_index] total += abs(val_a - val_b) return total # 测试示例 l = [[1,10],[2,20],[3,5],[4,40]] # 取子列表索引为1的元素计算 result = calc_adjacent_abs_sum(l, target_index=1) print(result) # 输出结果为45,对应|10-20| + |5-40| = 10 +35
场景2:列表后续被排序/打乱,需基于原始索引校验相邻关系
如果嵌套列表经过排序、打乱等操作改变了原有顺序,需要先绑定原始索引再做校验:
# 给每个子列表绑定原始索引 l_with_origin_idx = [(idx, item) for idx, item in enumerate(l)] def calc_adjacent_abs_sum_with_origin_idx(nested_list_with_idx, target_index): total = 0 for i in range(0, len(nested_list_with_idx), 2): if i + 1 >= len(nested_list_with_idx): break origin_idx1, item1 = nested_list_with_idx[i] origin_idx2, item2 = nested_list_with_idx[i+1] # 基于原始索引校验相邻关系 if abs(origin_idx1 - origin_idx2) != 1: continue total += abs(item1[target_index] - item2[target_index]) return total
自定义调整说明
如果你需要计算所有连续相邻对的差值和(比如4个元素的列表计算[0&1、1&2、2&3]三组),只需把遍历的步长改为1,调整循环逻辑即可。
内容的提问来源于stack exchange,提问作者rafaelp014
相关产品推荐
相关产品推荐

