如何修改Python代码实现任意长度列表的对应元素逐位相加
问题原因
你现有代码的逻辑仅适配lst1长度大于等于lst2的场景:当lst2长度超过lst1时,循环变量i会超出lst1的索引范围,触发IndexError索引越界报错。
修改方案
你可以取两个列表的最小长度作为循环的上限,从根源避免索引越界,再根据你的业务需求选择是否保留超出共同长度的元素:
方案1:对应位相加,保留长列表超出部分的元素
和你原有测试用例逻辑一致:短列表和长列表对应位相加,长列表多出来的元素直接保留在结果末尾,同时避免修改输入的原始列表:
def elem_sum(lst1, lst2): # 复制lst1生成结果列表,避免修改传入的原始列表 res = lst1.copy() min_length = min(len(res), len(lst2)) # 仅循环到两个列表的最小长度,不会越界 for i in range(min_length): res[i] += lst2[i] # 如果lst2更长,把超出的部分追加到结果末尾 if len(lst2) > len(res): res.extend(lst2[min_length:]) return res
测试效果:
- 输入
elem_sum([1, 2, 3], [10, 20])输出[11, 22, 3] - 输入
elem_sum([1, 2, 3], [10, 20, 30, 40])输出[11, 22, 33, 40]
方案2:仅返回共同长度的相加结果
如果不需要保留超出共同长度的元素,直接取对应位相加的结果即可:
def elem_sum(lst1, lst2): res = [] min_length = min(len(lst1), len(lst2)) for i in range(min_length): res.append(lst1[i] + lst2[i]) return res
测试效果:
- 输入
elem_sum([1, 2, 3], [10, 20])输出[11, 22] - 输入
elem_sum([1, 2, 3], [10, 20, 30, 40])输出[11, 22, 33]
内容的提问来源于stack exchange,提问作者jordan parker
相关产品推荐
相关产品推荐

