如何仅使用len()内置函数实现数组首尾对应求和(None视为0)?
解决方案:按规则合并两个数组并仅使用
len()内置函数 实现代码
array_1 = [1, 4, 5, 8, None, None, None] array_2 = [7, 4, 8, 9, 5, None, None] array_3 = [] for i in range(len(array_1)): # 处理array_1的当前元素,None转为0 val1 = array_1[i] if array_1[i] is not None else 0 # 找到array_2对应的位置:从末尾开始第i+1个元素 val2_idx = len(array_2) - 1 - i val2 = array_2[val2_idx] if array_2[val2_idx] is not None else 0 # 求和并加入结果数组 array_3.append(val1 + val2) print(f"array_3 = {array_3}")
运行后输出:
array_3 = [1, 4, 10, 17, 8, 4, 7]
原代码的问题分析
- 双层循环错误:你用了两层
for循环,会让每个array_1的元素和多个array_2的元素配对求和,完全不符合题目要求的一对一对应规则,只需要单层循环遍历每个索引即可。 - 判断对象错误:代码里判断
i == None和j == None,但i和j是循环索引(整数),永远不可能是None,应该判断数组中对应位置的元素是否为None。 - 未收集结果:原代码只是打印每次的求和值,没有将结果整理成目标数组
array_3。
关键逻辑说明
- 对于每个索引
i,array_2对应的元素位置是len(array_2) - 1 - i:比如i=0时对应array_2的最后一个元素(索引6),i=1对应索引5,以此类推,完全匹配题目要求的“首个元素与末尾元素开始依次对应”的规则。 - 用三元表达式将
None转为0,不需要修改原数组,直接计算对应值即可。 - 整个过程仅使用了
len()这一个内置函数,符合题目限制。
内容的提问来源于stack exchange,提问作者Zabia Hossain
相关产品推荐
相关产品推荐

