0

テキスト ファイルから数値を読み取って float のリストに変換しようとしていますが、何もうまくいかないようです。

ここに私のコードがあります:

python_data = open('C:\Documents and Settings\redacted\Desktop\python_lengths.txt','r')
python_lengths = []
for line in python_data:
    python_lengths.append(line.split())
python_lengths.sort()

print python_lengths

戻り値:

[['12.2'], ['26'], ['34.2'], ['5.0'], ['62'], ['62'], ['62.6']]

(すべてのブラケットが含まれています)

しかし、次のような通常のコマンドを使用して浮動小数点数のリストに変換することはできません。

python_lengths = float(python_lengths)

また:

float_lengths = [map(float, x) for x in python_lengths]

ネストされているように見えるからですか?

4

3 に答える 3

5

これは.split()、要素が 1 つしか存在しない場合でも常にアイテムのリストを返すためです。を変更すると、期待どおりのフラット リストが得python_lengths.append(line.split())られpython_lengths.extend(line.split())ます。

于 2012-05-24T07:16:47.773 に答える
0
def floats_from_file(f):
    for line in f:
        for word in line.split():
            yield float(word)

with open('C:/Documents and Settings/redacted/Desktop/python_lengths.txt') as f:
    python_lengths = list(floats_from_file(f))

python_lengths.sort()

print python_lengths

Windows でもスラッシュを使用できることに注意してください。バックスラッシュを使用する場合は、問題を回避するために「生の」文字列を使用する必要があります。どんな問題?一部の文字はバックスラッシュで特別です。たとえば、\n改行を表します。パスを単純な引用符で囲み、ディレクトリ名の 1 つが で始まるn場合、そこに改行が入ります。解決策は、バックスラッシュを 2 つ使用するか、生の文字列を使用するか、スラッシュのみを使用することです。

于 2012-05-24T07:37:08.160 に答える
0

@eumiroの答えは正しいですが、他に役立つものがあります:

numbers = []
with open('C:\Documents and Settings\redacted\Desktop\python_lengths.txt','r') as f:
   for line in f.readlines():
      numbers.extend(line.split())

numbers.sort()
print numbers
于 2012-05-24T07:19:01.650 に答える