0

intのリスト(hitTableWord)があり、リスト全体の数値の絶対値に1を加算しようとしていますが、Pythonで次のエラーメッセージが表示され続けます:metric =metric + 1 /(abs(metricNumber))TypeError :サポートされていないオペランドタイプ+:'type'および'float'。メトリックは次のように初期化されました:metric = 0

私は新人プログラマーであり、それが何を意味するのかわかりません。

 for a in range (0, len(hitTableWord)):
         output_file.write('Hit Word: '+ str(hitTableWord[a]) +' ' + str(hitTableNear[a])+ ', ')
         metric = metric + 1/(abs(hitTableWord[a]))

どんな助けでもいただければ幸いです。いつものように私の質問では、それは私が知らない途方もなく単純なものだと確信しています。何卒ご理解とご協力を賜りますようお願い申し上げます。

4

4 に答える 4

1

metricインスタンスではなく、どこかで定義したクラスのようです。つまり、次のようなものがあります。

class metric(object):
    pass

metric()そのインスタンスを取得するには、を呼び出す必要があります。metricを定義しないと、非常によく似たエラーが引き続き発生することに注意してください__add__

同様に、うっかりして次のことを行った可能性があります。

metric = someclass

あなたが意味したとき:

metric = someclass()

いずれにせよ、エラーメッセージは、クラスmetricが含まれていることを示しており、Pythonはクラスをfloatに(または、さらに言えば、何にでも)追加する方法を知りません。

また:

for a in range (0, len(hitTableWord)):

これは、Pythonで通常行う必要のないことです。ここでは、両方の関連する要素にアクセスする必要があるため、これを使用しています。これは、次のhitTableWordようhitTableNearに、より慣用的に行うことができます。

for word, near in zip(hitTableWord, hitTableNear):
于 2012-06-15T13:22:59.607 に答える
0

どうですか

from itertools import izip

metric = 0.
for tw,tn in izip(hitTableWord, hitTableNear):
    output_file.write("Hit Word: {} {}".format(tw,tn))
    metric += 1./abs(tw)
于 2012-06-15T13:25:13.423 に答える
0

hitTableWord数字だけが含まれていると思いますが、メトリックを定義する場所を見てください。このエラーは、2つの異なるタイプの変数を一緒に追加しようとしていること、およびPythonが特定のタイプに対してこの操作を実行できないことを意味します。これは、文字列を整数に追加したり、整数を文字列に連結したりできない場合と同様です。

例として:

5 + "abc" 

ここで、プラスは算術演算子として機能しますが、これは文字列では機能しません。

"abc" + 5  

ここで、プラスは文字列の連結を示します。これは整数では機能しません。

于 2012-06-15T13:23:07.867 に答える
0

そのメトリックを0で初期化して記述します。しかし、そうではないと思います。変数にtypeの値がtypeありmetricます。そしてそれがここでの問題です。

于 2012-06-15T13:23:37.850 に答える