You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

不同长度列表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]

完全符合预期结果。

对原代码问题的补充说明

  1. 嵌套循环:for i in range(len(lst1))套for j in range(len(lst2))会让每个lst1[i]都和所有lst2[j]相加,比如你的第一个测试用例会生成[11,21,12,22,13,23],这显然不是你要的按位置相加。
  2. 判断条件错误:(lst1[i] and lst2[j]) !=0会把元素本身是否为0当成判断依据,比如如果lst1里有0,这个逻辑就会出错,而我们真正需要判断的是当前索引是否在列表的有效长度内。

内容的提问来源于stack exchange,提问作者kittbaee

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 22:35:23