假设我有两个不同长度的列表。
a = [8,9,4,7,5,6,1,4,8]
b = [6,4,7,1,5,8,3,6,4,4]
我想要一个这样的列表:
c= a-b
#output = [2, 5, -3, 6, 0, -2, -2, -2, 4]
我怎样才能实现这个目标?
我尝试使用地图功能operator.sub
。但由于列表长度不同,我收到错误。
c = map(operator.sub, a, b)
TypeError:不支持的操作数类型 - :'NoneType'和'int'
答案 0 :(得分:7)
您可以将zip
与列表理解表达式一起使用:
>>> a = [8,9,4,7,5,6,1,4,8]
>>> b = [6,4,7,1,5,8,3,6,4,4]
>>> [x - y for x, y in zip(a, b)]
[2, 5, -3, 6, 0, -2, -2, -2, 4]
答案 1 :(得分:4)
from itertools import starmap
from operator import sub
a = [8,9,4,7,5,6,1,4,8]
b = [6,4,7,1,5,8,3,6,4,4]
output = list(starmap(sub, zip(a, b)))
如果您不想使用列表理解,可以使用itertools.starmap
完成此操作。
您也可以使用地图,但我认为starmap是更好的选择。使用map,您可以使用嵌套的zip
来缩短较长的参数。
output = map(sub, *zip(*zip(a, b)))
print(list(output))
# [2, 5, -3, 6, 0, -2, -2, -2, 4]