2016-11-14 4 views
-1

私は2つの異なるリストの要素の違いを計算する必要があります。Pythonで2つの文字列を引く

unsupported operand type(s) for -: 'str' and 'str'

は私がnumpyかのような任意のクラスを使用したくない:私は次のエラーが表示さ

b-a = ['3.5','-23.8','AMM-FFD']

import operator 
a = ['5', '35.1', 'FFD'] 
b = ['8.5', '11.3', 'AMM']  
difference = [each[0] - each[1] for each in zip(b, a)] 
print difference 

私はこの出力を必要とする:これは私のコードですpandas

+0

私は5と8.5の違いが1.5であるべきかどうか分かりません... – Mathias711

+0

エラーは明らかですので、これを修正する方法を考えましたか? – EdChum

+0

だから私は尋ねようとしている! – Braian

答えて

3

数値をfloatに変換し、要素を数値に変換できない場合は、その間に'-'を挿入します。

diffs = [] 
for i, j in zip(a, b): 
    try: 
     diffs.append(str(float(j) - float(i))) 
    except ValueError: 
     diffs.append('-'.join([j, i])) 

>>> print(diffs) 
['3.5', '-23.8', 'AMM-FFD'] 

Pythonは型付き強く静的動的と混同しない)であるので、文字列の間の算術演算子に遭遇した場合には、暗黙的に、文字列の数値解釈に演算を行いません。 明白なのマイナス演算子の動作は、明示的な動作がプラス(すなわち連結)されているように、文字列に関して動作します。最初の文字列から2番目の文字列のインスタンスを削除すると思いますか?その場合は、既に使用できるより明示的なstr.replaceメソッドがあります。または、最初の文字列が2番目の文字列で終わっている場合にのみ、2番目の文字列を最初の文字列から削除すると思いますか?予想される動作は100%明らかではないので、Pythonの著者は文字列のメソッドのサポートを__sub__にしていませんでした。

また、operatorモジュールはコードで使用されていないため、インポートする必要はありません。

関連する問題