5

すべてに:

誰かがエラーを理解するのを手伝ってくれるかどうか興味があります: ValueError: float() の無効なリテラル。テキストファイルをリストに渡し、このリストを浮動小数点値に変換しようとすると、これが発生します。

a = open("input.txt","r")
lines = a.readlines()
b = map(float, lines)

奇妙なのは、少なくとも私にとっては、処理するときです。

print repr(lines[0])

私は得る:

'0.000\t0.000...\t0.000\t0.000\n'

print type(lines[0])

私は得る:

<type 'str'>

したがって、マップ(フロート、ライン)が正しく機能しない理由がわかりません。この関数の使い方は間違っていますか? ドキュメントを見ると、マップ関数は map(function, iterable, ...) として与えられています。リストは反復可能ではありませんか?

また、誰かがこのエラーを説明してくれたり、このエラーの説明の方向性を教えてくれたりしたら、とてもありがたいです。

この質問について事前に感謝します。

4

3 に答える 3

7

この場合、readlines は必要ありません。時間とメモリの無駄です。

float のリストのリストが必要な場合:

b = [[float(v) for v in line.rstrip('\n').split('\t')] for line in a]

または、float の 1 つの大きなリスト:

b = [float(v) for line in a for v in line.rstrip('\n').split('\t')]
于 2011-11-02T21:26:25.413 に答える
2

a.readlines()は文字列のリストであるため、マップで変換しようとしています。float('0.000\t0.000\t0.000\t0.000\n')これにより、表示されているエラーが説明されます。

もう少し処理を行う必要があります (インライン コメントを参照してください)。

>>> x = '0.000\t0.000\t0.000\t0.000\n'
# To simulate a.readlines()' list
>>> lines = [x,]
>>> 

# Strip the newline, and separate the values based on the tab control character.
>>> lines_values = map(lambda l: l.strip().split('\t'), lines)
>>> lines_values
[['0.000', '0.000', '0.000', '0.000']]

# For each value in in the list of lines' values, convert from string to a float.
>>> values_float = [map(float, v) for v in values]
>>> values_float
[[0.0, 0.0, 0.0, 0.0]]
于 2011-11-02T19:53:42.870 に答える
2

は、文字列内の文字ValueErrorから来て\tいます。各行を個別に変換する前に、各行を個別の列に分割する必要があります。

>>> lines = ['0.000\t1.000\t2.000\n', '3.000\t4\t5.0\n']
>>> [[float(val) for val in line.strip().split('\t')] for line in lines]
[[0.0, 1.0, 2.0], [3.0, 4.0, 5.0]]
于 2011-11-02T19:54:46.800 に答える