Python 列表与列表相乘的列表
我想使用python 3将列表与列表相乘,假设列表的名称为Python 列表与列表相乘的列表,python,python-3.x,Python,Python 3.x,我想使用python 3将列表与列表相乘,假设列表的名称为L,如下所示: L = [[45.909221207388235, 84.41069326628269], [80.6591435966521, 47.93257841035172]] 第二个清单是: S = [0.002, 0.001] 乘法应该是:L[0][0]*S[0]和L[0][1]*S[0]然后是L[1][0]*S[1]和L[1][1]*S[1] 我尝试了zip方法: [a*b for x,y in zip(S,L) for
L
,如下所示:
L = [[45.909221207388235, 84.41069326628269], [80.6591435966521, 47.93257841035172]]
第二个清单是:
S = [0.002, 0.001]
乘法应该是:L[0][0]*S[0]
和L[0][1]*S[0]
然后是L[1][0]*S[1]
和L[1][1]*S[1]
我尝试了zip
方法:
[a*b for x,y in zip(S,L) for a,b in zip(x,y)]
但是出现了一个错误:zip
参数1
必须支持迭代
第二次试验使用map(lambda)
:
但得到的结果是错误的:
[9.181844241477647e-05, 0.00016882138653256538, 0.0001613182871933042, 9.586515682070343e-05]
正确的值为:
[0.09181844241477648, 0.1688213865325654, 0.0806591435966521, 0.047932578410351714]
您想使用
zip
,但不能使用两次:
>>> L = [[45.909221207388235, 84.41069326628269], [80.6591435966521, 47.93257841035172]]
>>> S = [0.002, 0.001]
>>> [n*x for n, sub in zip(S, L) for x in sub]
[0.09181844241477648, 0.1688213865325654, 0.0806591435966521, 0.047932578410351714]
>>>
因此,您需要将每个数字与每个子列表配对,然后将子列表中的每个数字乘以主数字
请注意,以防您正在使用numpy
(我认为您不是,并且我认为仅为此使用numpy
是不合理的),并且S
和L
是numpy.ndarray
对象,即:
>>> S = np.array(S)
>>> L = np.array(L)
那么你可能只想:
>>> (S*L).ravel()
array([0.09181844, 0.08441069, 0.16131829, 0.04793258])
如果我理解正确,你想用L中的每一列乘以S的相应值:
L = [[45.909221207388235, 84.41069326628269],
[80.6591435966521, 47.93257841035172]]
S = [0.002, 0.001]
R = [ [s*n for n in row] for s,row in zip(S,L) ]
输出:
print(R)
[ [0.09181844241477648, 0.1688213865325654],
[0.0806591435966521, 0.047932578410351714]]
您应该给出一个行数不同于列数的示例,以便更清楚地说明这一点您可以使用numpy数组来实现这一点。
print(R)
[ [0.09181844241477648, 0.1688213865325654],
[0.0806591435966521, 0.047932578410351714]]