如何以递归方式将多个元组与一个列表相乘?

2024-04-19 00:35:59 发布

您现在位置:Python中文网/ 问答频道 /正文

我一直在想办法,但找不到解决办法,情况如下:

我有这样一个元组列表:

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

Tags: the列表情况arelistslist元组inside
2条回答

嵌套列表理解

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]]]

你可以使用列表理解。但考虑到这些都是数组操作,我建议您使用专业的第三方库,如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]]])

相关问题 更多 >