我一直试图找出答案,但找不到解决方案,情况如下:
我有一个这样的元组列表:
list = [(5,8,3)
,(4,5,6)
,(7,8,9)]
还有另一个包含值的列表,像这样:
#the lists inside list2 are user supplied lists
list2 = [[10,20,30]
,[40,50,60]
,[70,80,90]]
我希望输出如下:
5*10, 5*20, 5*30
8*40, 8*50, 8*60
3*70, 3*80, 3*90
4*10, 4*20, 4*30
5*40, 5*50, 5*60
6*70, 6*80, 6*90
7*10, 7*20, 7*30
8*40, 8*50, 8*60
9*70, 9*80, 9*90
答案 0 :(得分:2)
您可以使用列表推导。但是鉴于这些都是数组操作,我建议您使用专业的第三方库,例如NumPy。这是一种方法:
import numpy as np
L1 = np.array([(5, 8, 3),
(4, 5, 6),
(7, 8, 9)])
L2 = np.array([[10, 20, 30],
[40, 50, 60],
[70, 80, 90]])
res = np.transpose((L1[:, None, :] * L2[:, :, None].T), axes=[0, 2, 1])
结果:
array([[[ 50, 100, 150],
[320, 400, 480],
[210, 240, 270]],
[[ 40, 80, 120],
[200, 250, 300],
[420, 480, 540]],
[[ 70, 140, 210],
[320, 400, 480],
[630, 720, 810]]])
答案 1 :(得分:1)
嵌套列表理解
In [15]: [[[c*d for d in b] for c in a ] for a in list for b in list2]
Out[15]:
[[[50, 100, 150], [80, 160, 240], [30, 60, 90]],
[[200, 250, 300], [320, 400, 480], [120, 150, 180]],
[[350, 400, 450], [560, 640, 720], [210, 240, 270]],
[[40, 80, 120], [50, 100, 150], [60, 120, 180]],
[[160, 200, 240], [200, 250, 300], [240, 300, 360]],
[[280, 320, 360], [350, 400, 450], [420, 480, 540]],
[[70, 140, 210], [80, 160, 240], [90, 180, 270]],
[[280, 350, 420], [320, 400, 480], [360, 450, 540]],
[[490, 560, 630], [560, 640, 720], [630, 720, 810]]]