Python实现列表除第i个元素外其余元素相乘并返回结果列表
除自身以外数组乘积的Python实现
需求说明:给定整数列表,对每个位置i计算排除第i个元素后其余所有元素的乘积,返回与原列表长度一致的结果列表。示例:输入
[1,2,3,4],输出[24,12,8,6]。
不推荐:暴力遍历法
逻辑简单直接,遍历每个位置时跳过当前元素计算所有剩余元素乘积,仅适合长度极小的列表使用,时间复杂度为O(n²),列表长度过大时性能极差。
def product_except_self_brute(nums): result = [] for i in range(len(nums)): product = 1 for j in range(len(nums)): if i != j: product *= nums[j] result.append(product) return result
推荐:左右乘积法
时间复杂度O(n),额外空间复杂度O(1)(不计入输出列表占用的空间),兼容存在0的输入场景,不会触发除零错误。
实现逻辑:
- 先从左到右遍历,将每个位置左侧所有元素的乘积存入结果列表对应位置
- 再从右到左遍历,将每个位置右侧所有元素的乘积乘到结果列表对应位置,最终得到的就是排除当前元素的总乘积
def product_except_self(nums): n = len(nums) result = [1] * n # 计算左侧乘积 left_product = 1 for i in range(n): result[i] = left_product left_product *= nums[i] # 计算右侧乘积并合并到结果 right_product = 1 for i in range(n-1, -1, -1): result[i] *= right_product right_product *= nums[i] return result
调用测试
print(product_except_self([1,2,3,4])) # 输出:[24, 12, 8, 6]
注意:不要使用「先计算所有元素总乘积再除以当前位置元素」的实现思路,当输入列表存在0时会触发除零错误,也无法得到正确结果
内容的提问来源于stack exchange,提问作者Elezabeth Jose
相关产品推荐
相关产品推荐

