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

如何计算列表中除当前索引元素外其余所有元素的乘积

问题需求

现有列表 input_list = [1, 2, 3, 4, 5],需要生成一个新列表,新列表每个位置的元素为原列表除当前索引对应元素外,其余所有元素的乘积。

示例

输入:

input_list1 = [1, 2, 3, 4, 5]

输出逻辑说明:第一个位置的结果是原列表除第一个元素外所有元素的乘积 2*3*4*5 = 120,其余位置计算规则一致,最终预期输出为:

prod = [120, 60, 40, 30, 24]

实现方案

方案1:暴力遍历法(时间复杂度O(n²),适合短列表场景)

对每个索引直接遍历全列表,跳过当前元素计算乘积:

def product_except_self(nums):
    n = len(nums)
    res = []
    for i in range(n):
        product = 1
        for j in range(n):
            if i != j:
                product *= nums[j]
        res.append(product)
    return res

# 调用测试
input_list = [1,2,3,4,5]
print(product_except_self(input_list))
# 输出:[120, 60, 40, 30, 24]

方案2:左右乘积数组法(时间复杂度O(n),效率更高)

分别计算每个位置左侧所有元素的乘积、右侧所有元素的乘积,最后对应位置左右乘积相乘得到结果:

def product_except_self(nums):
    n = len(nums)
    left_prod = [1]*n
    right_prod = [1]*n
    res = [1]*n
    
    # 计算每个位置左侧所有元素的乘积
    for i in range(1, n):
        left_prod[i] = left_prod[i-1] * nums[i-1]
    # 计算每个位置右侧所有元素的乘积
    for i in range(n-2, -1, -1):
        right_prod[i] = right_prod[i+1] * nums[i+1]
    # 左右乘积相乘得到最终结果
    for i in range(n):
        res[i] = left_prod[i] * right_prod[i]
    return res

# 调用测试
input_list = [1,2,3,4,5]
print(product_except_self(input_list))
# 输出:[120, 60, 40, 30, 24]

方案3:空间优化版(空间复杂度O(1),输出数组不计入额外空间)

不需要单独存储左右乘积数组,直接在结果数组上先存储左侧乘积,再动态计算右侧乘积合并结果:

def product_except_self(nums):
    n = len(nums)
    res = [1]*n
    # 先存储左侧乘积
    for i in range(1, n):
        res[i] = res[i-1] * nums[i-1]
    # 动态计算右侧乘积并合并到结果
    right = 1
    for i in range(n-1, -1, -1):
        res[i] *= right
        right *= nums[i]
    return res

# 调用测试
input_list = [1,2,3,4,5]
print(product_except_self(input_list))
# 输出:[120, 60, 40, 30, 24]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.09 18:09:01