合并两个不同长度的python列表

时间:2018-11-12 22:45:12

标签: python-2.7 list sage

我有此代码:

L = [1, x, x**2]
L2 = [1, 2*x]
def my_mul(x,y):
    if x == None: return y
    if y == None: return x
    return x*y
map(my_mul, L, L2)

这产生了我想要的,这是L和L2的元素乘积。

[1, 2*x^2, x^2]

但是有没有更Python化的方式来实现这一目标?

具体地,我可以在不定义自己的函数的情况下做到这一点吗?

1 个答案:

答案 0 :(得分:2)

下面的代码应该可以满足您的需求

import itertools
import operator

l1 = [1, 2, 3]
l2 = [1, 2, 3, 4]

list(itertools.starmap(operator.mul, itertools.zip_longest(l1, l2, fillvalue=1)))
# result [1, 3, 9, 4]

说明

zip_longest将压缩并填充较短列表中的缺失值:

itertools.zip_longest(l1, l2, fillvalue=1)
[(1, 1), (2, 2), (3, 3), (1, 4)]

starmap将乘法运算符应用于每个整数对