Python列表与嵌套列表逐元素相乘问题求助(非numpy实现)
嘿,我来帮你看看问题出在哪~
你原来的代码里用了zip(a, b),这其实是把a里的元素和b里的子列表逐个配对了——比如a[0]和b[0]配对,a[1]和b[1]配对,然后每个子列表里的所有元素都只乘了a中对应的那一个元素,而且a[2]因为b只有两个子列表,根本没被用到,这就导致结果完全不符合预期啦。
我们需要的是对b里的每一个子列表,都和a做逐位置元素相乘,也就是子列表的第i个元素乘a的第i个元素。用纯Python的列表推导式就能解决,给你两种写法:
方法一:用zip配对对应元素
a = [1, 2, 3] b = [[2, 4, 6], [3, 5, 7]] product = [[x * y for x, y in zip(a, sublist)] for sublist in b] print(product) # 输出 [[2, 8, 18], [3, 10, 21]]
外层循环遍历b里的每个子列表,内层循环用zip(a, sublist)把a的元素和子列表的元素一一配对,相乘后就得到对应位置的乘积。
方法二:用索引定位元素
如果你习惯用索引操作,也可以这么写:
product = [[sublist[i] * a[i] for i in range(len(a))] for sublist in b]
通过range(len(a))获取索引,分别取子列表和a中对应位置的元素相乘,效果和上面完全一致。
内容的提问来源于stack exchange,提问作者Python_learner
相关产品推荐
相关产品推荐

