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

Python 如何以递归方式将多个元组与列表列表相乘?,python,arrays,python-3.x,list,Python,Arrays,Python 3.x,List,我一直在想办法,但找不到解决办法,情况是这样的: 我有一个元组列表,如下所示: 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*

我一直在想办法,但找不到解决办法,情况是这样的:

我有一个元组列表,如下所示:

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

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

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

嵌套列表理解

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

嵌套列表理解

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

到目前为止你试过什么?你犯了什么错误?你想打印输出还是为另一个嵌套元组计算输出?我尝试了嵌套循环,但得到了非常奇怪的结果,我想打印输出你到目前为止尝试了什么?你犯了什么错误?你想打印输出还是为另一个嵌套元组计算输出?我尝试了嵌套循环,但我得到了非常奇怪的结果,我想打印输出Hanx,这正是我想要的Hanx,这正是我想要的。你可以提供一个关于这个主题的教程链接吗?你可以提供一个关于这个主题的教程链接吗?