2012-03-21 20 views
3

私のプログラムは、数字の束を含むテキスト文書を読み込み、正の数だけのリストを作成することになっています。テキスト文書から文字列を浮動小数点に変換することができないので、それらがpostiveであるかどうかは判断できません。文字列のリストを浮動小数点数に変換できません

私のコピーの貼り付けがバグであるため、スクリーンショットをリンクしました。

http://i.stack.imgur.com/L1Z7z.png

http://i.stack.imgur.com/L1Z7z.png

数= float(number)がなければ、私はあなたが簡単に山車の中にそのリストを翻訳することができ['3.7', '-22', '3500', '38', '-11.993', '2200', '-1', '3400', '3400', '-3400', '-22', '12', '11', '10', '9.0']

答えて

5

を得る:

>>> nums = ['3.7', '-22', '3500', '38', '-11.993', '2200', '-1', '3400', '3400', '-3400', '-22', '12', '11', '10', '9.0'] 
>>> map(float, nums) 
[3.7, -22.0, 3500.0, 38.0, -11.993, 2200.0, -1.0, 3400.0, 3400.0, -3400.0, -22.0, 12.0, 11.0, 10.0, 9.0] 

しかし、問題は、ことのようですファイル内の行に個々の浮動小数点数が含まれていません。 float(number)に電話すると、numberはファイルからの行で、(エラーから)3つのスペース区切りの数字 "3.7 -22 3500"が含まれているように見えます。あなたが必要なもの

が分割後float機能を呼び出すことです:

より機能
for line in f: 
    for numberString in line.split() 
    number = float(numberString) 
    if(number > 0) 
     numbers.append(number) 

あるいは、すべての

for line in f: 
    numbers.extend([n for n in map(float, line.split()) if n > 0]) 
+0

'LST =フィルタ(なし、itertools.chain(マップ(フロート、Fの行のためのline.split())))' – agf

+0

OKえーえ。私はあなたがそれらに追加することができる条件付きのifステートメントを忘れていました。ありがとう! –

+0

あなたはもう一度私を助けることができます。私はそのリストを取って、各行に1つずつ、テキスト文書に収まるように印刷する必要があります。私はrange関数を使うのではなく、無限の数値を呼び出す方法を理解できません。 –

2

まず、あなたは意志、list変数を呼び出すことはありません内蔵のlistを隠す。ここで

が改善されて:

li = [] 

for line in open("numbers.txt"): 
    nums = line.split() # split the line into a list of strings by whitespace 
    nums = map(float, nums) # turn each string into a float 
    nums = filter(lambda x: x >= 0, nums) # filter the negative floats 

    li.extend(nums) # add the numbers to li 
+0

私は 'map()'の使用が好きです(リストの理解よりももっとエレガントです)。しかし、 'nums = [x> 0の場合はxのnumのxは'] '' filter() ' - ちょうど私の$ 0.02。 –

+0

末尾のスペースを取り除く必要はありません。 \ n ".split()'は '['has'、 'trailing']を返す' – dhg

2

ファイルの内容を読んだ後、あなたは、スペースで内容を分割し、個別に各番号を解析する必要があります。現在、 '3.7 -22 3500'という文字列を単一の浮動小数点として解析することはできませんが、これは不可能です。

>>> float('3.7 -22 3500') 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
ValueError: invalid literal for float(): 3.7 -22 3500 
+0

ありがとう!私は下の人から答えを得ましたが、あなたの説明は私の誤りを理解する助けになりました –

関連する問題