如何根据另一列表的值对嵌套列表的对应子列表执行批量乘法
实现方案
1. 基础for循环实现
该需求完全可以通过for循环实现,你之前得到错误结果是因为逻辑错用了嵌套循环遍历b列表,不需要遍历整个b,只要同步取a的子列表和b对应位置的系数再计算即可:
a = [[8, 23, 45, 12, 78, 58], [2,3,4,1,5,4], [6, 7, 6, 9, 5, 8] , [1, 2, 4, 7, 8]] b = [1, 0 , 1 , 2] result = [] # 用zip同步遍历a的子列表和b的对应系数 for sub_list, coeff in zip(a, b): # 计算当前子列表所有元素乘系数 processed = [num * coeff for num in sub_list] result.append(processed) print(result)
运行输出结果:
[[8, 23, 45, 12, 78, 58], [0, 0, 0, 0, 0, 0], [6, 7, 6, 9, 5, 8], [2, 4, 8, 14, 16]]
注:你给出的预期输出中第三个子列表遗漏了元素5,属于笔误,实际计算结果如上。
2. 精简列表推导式写法
逻辑和for循环完全一致,写法更简洁,适合熟练场景使用:
result = [[num * coeff for num in sub_list] for sub_list, coeff in zip(a, b)]
3. 大规模数值计算可选Numpy实现
如果是处理大批量数值数组,用Numpy的广播特性运算效率更高:
import numpy as np # 子列表长度不同时用object类型,长度一致可直接转二维数组运算 a_arr = np.array(a, dtype=object) b_arr = np.array(b) result = [sub * coeff for sub, coeff in zip(a_arr, b_arr)]
内容的提问来源于stack exchange,提问作者bubblegum
相关产品推荐
相关产品推荐

