Объединить два списка разной длины Python - PullRequest
0 голосов
/ 13 ноября 2018

У меня есть этот код:

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]

Но есть ли более питонный способ достижения этого?

Конкретно, могу ли я сделать это без определения своей собственной функции?

1 Ответ

0 голосов
/ 13 ноября 2018

Приведенный ниже код должен достичь того, что вам нужно

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 будет применять оператор умножения к каждой целой паре

...