按索引实现数组乘法的Python函数相关问题求助
Python 数组按索引相乘实现方案
下面提供两种最常见的按索引相乘场景的实现方案,可根据实际需求选用。
场景1:多个等长数组相同索引位元素相乘
即输入N个长度一致的数组,输出长度相同的数组,每个位置的元素为所有输入数组对应索引位元素的乘积。
示例输入:[1,2,3]、[4,5,6]、[7,8,9],输出:[28, 80, 162]
原生Python实现(无第三方依赖)
from functools import reduce import operator def multiply_by_index(*arrays): # 校验所有输入数组长度一致 if len({len(arr) for arr in arrays}) != 1: raise ValueError("所有输入数组的长度必须相等") # 按索引分组后逐组计算乘积 return [reduce(operator.mul, item_group, 1) for item_group in zip(*arrays)] # 测试 a = [1,2,3] b = [4,5,6] c = [7,8,9] print(multiply_by_index(a,b,c))
Numpy实现(适合大规模数组运算)
import numpy as np def multiply_by_index_np(*arrays): return np.array(arrays).prod(axis=0).tolist() # 测试 a = [1,2,3] b = [4,5,6] c = [7,8,9] print(multiply_by_index_np(a,b,c))
场景2:单个数组元素与对应索引值相乘
即输入单个数组,每个位置的元素和自身索引值相乘得到结果,支持自定义索引起始值。
示例输入:[2,5,7],索引从0开始输出:[0,5,14],索引从1开始输出:[2,10,21]
原生Python实现(无第三方依赖)
def element_multiply_index(arr, index_start=0): return [ (idx + index_start) * val for idx, val in enumerate(arr) ] # 测试 test_arr = [2,5,7] print(element_multiply_index(test_arr)) # 索引起始为0 print(element_multiply_index(test_arr, index_start=1)) # 索引起始为1
Numpy实现(适合大规模数组运算)
import numpy as np def element_multiply_index_np(arr, index_start=0): arr_np = np.array(arr) idx_arr = np.arange(len(arr_np)) + index_start return (arr_np * idx_arr).tolist()
注意事项
- 所有实现默认输入元素为数值类型,如需兼容非数值场景可自行添加类型校验逻辑
- 处理长度超过1000的数组时优先使用numpy方案,运算效率远高于原生Python实现
内容的提问来源于stack exchange,提问作者slayer1996
相关产品推荐
相关产品推荐

