如何在Python中将两个嵌套列表的元素相乘,其中子列表的长度不相等?

时间:2016-11-30 12:11:18

标签: python

我有两个列表列表,其中子列表可以有可变长度, 但每个列表都有相同的结构。例如:

lee =[[1,2,3], [1,2,3,4]]

lee2=[[7,8,9], [7,8,9,10]]

我想将每个列表的相应元素相乘以得到:

output=[[7,16,27], [7,16,27,40]]

3 个答案:

答案 0 :(得分:2)

单行使用2个连续zip来交换列表,然后是列表的元素:

lee =[[1,2,3], [1,2,3,4]]    
lee2=[[7,8,9], [7,8,9,10]]


output = [[a*b for a,b in zip(*l)] for l in zip(lee,lee2)]

结果:

[[7, 16, 27], [7, 16, 27, 40]]

对于不熟悉listcomps的人的等效方法:

output = []
for l1,l2 in zip(lee,lee2):
    for a,b in zip(l1,l2):
        output.append(a*b)

答案 1 :(得分:1)

这可以通过使用list-comrehensions和zip内置的单行来完成,它将一个或多个iterables的元素组合在另一个iterable中:

output = [[el1 * el2 for el1, el2 in zip(sublist1, sublist2)] for sublist1, sublist2 in zip(lee, lee2)  ]  

因此,zip在外层用于选择输入列表的每个子列表,在内层用于选择这些子列表的每个元素。

答案 2 :(得分:1)

使用operator模块的另一种方法。

import operator
output = [map(operator.mul, x, y) for x,y in zip(lee, lee2)]

但通常不会鼓励额外的进口。