Python中的列表减法

4
假设我有两个长度不同的列表。
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]

我该如何实现这个功能?

我尝试使用map函数和operator.sub方法,但由于列表长度不同而导致错误。

c = map(operator.sub, a, b)

TypeError: 不支持的操作类型 '-': 'NoneType' 和 'int'。

当长度相等时,从a-b开始...匹配结束后该怎么办?是a-a还是其他? - Vishal Kumar Sahu
1
zip函数会在最短的那个停止。 - Ry-
我删除了pandas和numpy标签,因为问题和接受的答案只使用列表。 - hpaulj
2个回答

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]

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来完成此操作。您也可以使用map,但我认为starmap是更好的选择。使用map时,您可以使用嵌套的zip来缩短较长的参数。
output = map(sub, *zip(*zip(a, b)))
print(list(output))
# [2, 5, -3, 6, 0, -2, -2, -2, 4]

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接