我有两个列表列表,其中子列表可以有可变长度, 但每个列表都有相同的结构。例如:
lee =[[1,2,3], [1,2,3,4]]
lee2=[[7,8,9], [7,8,9,10]]
我想将每个列表的相应元素相乘以得到:
output=[[7,16,27], [7,16,27,40]]
答案 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)]
但通常不会鼓励额外的进口。