不同长度列表element-wise summation函数问题及代码修复求助
实现两个列表的按元素相加(支持不同长度)
你的核心问题是用了嵌套循环,这会把lst1的每个元素和lst2的每个元素都配对相加,导致结果长度是两个列表长度的乘积,完全不符合需求;另外判断条件(lst1[i] and lst2[j]) !=0逻辑错误,这是在判断元素是否非零,而非判断当前索引是否在列表的有效范围内。
正确实现思路
我们只需要遍历到两个列表中更长的那个的长度,对每个索引位置做以下判断:
- 如果两个列表在该索引都有元素,就相加
- 如果只有
lst1在该索引有元素,直接取lst1的元素 - 如果只有
lst2在该索引有元素,直接取lst2的元素
修复后的代码
def elem_sum(lst1: list[int], lst2: list[int]) -> list[int]: result = [] # 先获取两个列表的最大长度,确保遍历到所有元素 max_length = max(len(lst1), len(lst2)) for i in range(max_length): # 判断当前索引是否在lst1的范围内 has_lst1 = i < len(lst1) # 判断当前索引是否在lst2的范围内 has_lst2 = i < len(lst2) if has_lst1 and has_lst2: # 两个列表都有当前索引的元素,相加 result.append(lst1[i] + lst2[i]) elif has_lst1: # 只有lst1有,直接添加 result.append(lst1[i]) else: # 只有lst2有,直接添加 result.append(lst2[i]) return result
测试验证
运行你给出的测试用例:
print(elem_sum([1, 2, 3], [10, 20])) # 输出 [11, 22, 3] print(elem_sum([1, 2, 3], [10, 20, 30, 40])) # 输出 [11, 22, 33, 40]
完全符合预期结果。
对原代码问题的补充说明
- 嵌套循环:
for i in range(len(lst1))套for j in range(len(lst2))会让每个lst1[i]都和所有lst2[j]相加,比如你的第一个测试用例会生成[11,21,12,22,13,23],这显然不是你要的按位置相加。 - 判断条件错误:
(lst1[i] and lst2[j]) !=0会把元素本身是否为0当成判断依据,比如如果lst1里有0,这个逻辑就会出错,而我们真正需要判断的是当前索引是否在列表的有效长度内。
内容的提问来源于stack exchange,提问作者kittbaee
相关产品推荐
相关产品推荐

