0

私はPythonを調べ始め、新しいものを少しずつ把握しようとしています。私が自分で設定した最新の目標は、フロートのタブ別ファイルをメモリに読み込み、リスト内の値を比較して、差が次の場合は値を出力することでした。ユーザーが指定した大きさ。これまでに次のコードを記述しました。

#! /usr/bin/env python
value = raw_input('Please enter a mass difference:')
fh = open ( "values" );
x = []
for line in fh.readlines():
 y = [float for float in line.split()]
 x.append(y)
fh.close()
for i in range(0,len(x)-1):
 for j in range(i,len(x)):
  if x[j][0] - x[i][0] == value:
   print x[i][0],x[j][0]

コンパイラは、文字列から文字列を(論理的に)減算することは許可されていないと文句を言いますが、私の質問は...なぜ文字列なのですか?floatにfloatを使用しているので、ネストされたリストはfloatのリストにすべきではありませんか?

リテラルエラー:

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

誰かが私の推論がどこで間違っているのか教えてくれれば幸いです;)

4

3 に答える 3

3

リスト内包表記の代わりにこれを試してください。

y = [float(i) for i in line.split()]

説明

ファイルから読み取ったデータは文字列であり、キャストする必要のある他のタイプに変換します。したがって、あなたの場合、あなたはあなたfloat()が試した..を介してあなたの値をフロートにキャストしたいのですが、完全に正しく/成功していません。これにより、探していた結果が得られるはずです。

変換する他の値がある場合、この構文は機能します。

 float_val = float(string_val)

string_valにfloatの有効な文字が含まれていると仮定すると、変換されます。含まれていない場合は、例外が発生します。

>>> float('3.5')
3.5

>>> float('apple')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: invalid literal for float(): apple
于 2012-07-04T12:35:59.153 に答える
2

リスト内包表記は、あなたが思っていることをしていません。各文字列を変数に割り当ててfloat返すだけです。代わりに、実際には別の名前を使用して、それにfloatを呼び出します。

y = [float(x) for x in line.split()]
于 2012-07-04T12:36:50.663 に答える
2

エラー1y = [float(x) for x in line.split()]または単にmap(float,lines.split())

エラー2if x[j][0] - x[i][0] == float(value): #you didn't converted value to a float

于 2012-07-04T12:37:00.930 に答える