如何用列表值替换任意深度嵌套数组中符合阈值条件的元素
任意嵌套深度多维数组处理方案
问题梳理
- 输入包含两个对象:
- 固定长度一维数组
A,示例值为[10,20,30,40,50] - 多维数组
array,结构规则为每3个最内层子数组为一组向上嵌套,所有最内层子数组长度和A完全一致,示例初始值为[[[1,5,8,3,4],[18,4,-8,4,21],[-8,12,42,16,-9]], ...]
- 固定长度一维数组
- 处理规则:遍历所有最内层子数组的元素,当元素值超过指定阈值(示例取10)时,替换为
A中对应索引位置的值;未超过阈值则替换为0 - 阈值为10时的预期输出为
[[[0,0,0,0,0],[10,0,0,0,50],[0,20,30,40,0]], ...] - 原有尝试代码的问题:硬编码了3层for循环,仅能适配固定3层嵌套的数组,且循环逻辑错误,将遍历得到的元素值误作为数组索引使用,既不灵活也无法得到正确结果。
无多层硬编码循环的实现代码
用递归自动适配任意嵌套深度,不需要提前知道数组有多少层,代码如下:
# 配置阈值 THRESHOLD = 10 A = [10,20,30,40,50] def array_processor(current_arr): # 判断是否到达最内层:当前数组首元素不是列表类型,即为最内层 if not isinstance(current_arr[0], list): for idx, num in enumerate(current_arr): current_arr[idx] = A[idx] if num > THRESHOLD else 0 return # 未到最内层则递归处理每个子数组 for sub in current_arr: array_processor(sub) # 直接传入目标数组调用即可,无需关心嵌套深度 array_processor(array)
逻辑说明
- 递归终止条件:检测到当前传入的数组首元素不是列表,就说明已经抵达和
A长度匹配的最内层子数组,直接按索引完成值替换即可 - 递归递进逻辑:如果当前层还存在子数组,就逐个传入处理函数递归遍历,全程不需要手动写多层嵌套的for循环,不管嵌套深度是3层、5层还是更深,都可以正常处理
- 代码直接在原数组上做修改,处理完成后原
array变量就是符合要求的结果。
内容的提问来源于stack exchange,提问作者Bob
相关产品推荐
相关产品推荐

