2017-03-16 12 views
4

長さの異なる2つのリストがあるとします。Pythonでリストを差し引く

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: unsupported operand type(s) for -: 'NoneType' and 'int'

+0

「a-b」までの長さは等しい...長さのマッチングの終了後は何ですか? a-aか何か? –

+1

['zip'関数](https://docs.python.org/3/library/functions.html#zip)が最短で停止します。 – Ryan

+0

質問と受け入れられた答えがリストを使用するだけなので、私はパンダとnumpyタグを削除しました。 – hpaulj

答えて

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を使用する方が適切です。マップを使用すると、より長い引数を短縮するためにネストされたzipを使用できます。

output = map(sub, *zip(*zip(a, b))) 
print(list(output)) 
# [2, 5, -3, 6, 0, -2, -2, -2, 4] 
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] 
関連する問題