Pythonでは、リスト内のすべての項目を浮動小数点に変換するにはどうすればよいですか?


246

テキストファイルを読み取り、文字列として10進数を取り出し、リストに配置するスクリプトがあります。

だから私はこのリストを持っています:

['0.49', '0.54', '0.54', '0.54', '0.54', '0.54', '0.55', '0.54', '0.54',  '0.54', 
 '0.55', '0.55', '0.55', '0.54', '0.55', '0.55', '0.54', '0.55', '0.55', '0.54']

リスト内の各値を文字列から浮動小数点に変換するにはどうすればよいですか?

私が試してみました:

for item in list:
    float(item)

しかし、これは私にはうまくいかないようです。


60
変数名としてリストを使用しないでください。
Tim Pietzcker、2009年

4
上記のコメントについて詳しく説明しlistます。変数名として使用すると、組み込みのlistコンストラクターがシャドウされるため、同じスコープで使用することはできません
Lasse Halberg Haarbye

回答:


452
[float(i) for i in lst]

正確には、float値を持つ新しいリストを作成します。mapアプローチとは異なり、py3kで動作します。


7
大規模な配列の場合は、numpy:を使用することをお勧めします np.array(inp_list, dtype=np.float32)。あなたも、それはフロートだどうかを指定する必要があり、ちょうど使用しないでくださいnp.array(inp_list)
トーマスDevoogdt

2
@Thomas Devoogdt:タイプを指定する必要があると思います。そうしないと、文字列の
乱雑な

2
[float(i) for i in lst]何かに割り当てる必要があることに注意してください。例:new_list = [float(i) for i in lst]
FaizFizy、

126

map(float, mylist) それを行う必要があります。

(Python 3では、マップはリストオブジェクトを返さなくなります。そのため、繰り返し処理するものだけでなく、新しいリストが必要な場合は、 list(map(float, mylist)おそらくよりPython的なSilentGhostの回答を使用します。)


これは実際にはPython 3の設計の
次善策です。– xuancong84

15

float(item)正しいことを行います。引数を浮動小数点数に変換して返しますが、引数はインプレースで変更されません。コードの簡単な修正は次のとおりです。

new_list = []
for item in list:
    new_list.append(float(item))

同じコードをリスト内包表記を使用して短く書くことができます。 new_list = [float(i) for i in list]

リストをインプレースで変更するには:

for index, item in enumerate(list):
    list[index] = float(item)

ところで、list同じ名前の組み込み関数を偽装するため、変数には使用しないでください。


申し訳ありませんが、ここではインプレースの意味を理解できませんでした。以前のpythonicの回答とどう違うのですか?前の回答「[float(i)for i in lst]」の変換では、元のリストインデックスは保持されません
AAI

1
@AAI元のリストを変更するか、新しいリストを作成します。
Denis Otkidach

13

これは別の方法です(ループを使用しないでください!):

import numpy as np
list(np.float_(list_name))

np.arrayをnp.arrayとして保持したい場合は、np.arrayをリストに再度キャストする必要はありません=)
alvas

8

あなたはnumpyでこれを行うこともできます

import numpy as np
np.array(your_list,dtype=float)

これは、リストのnp配列をfloatとして返します

'dtype'をintに設定することもできます


1
しかし、あなたはリストではなく派手な配列を返しています。
user650261

3

numpyを使用して、リストを直接浮動配列または行列に変換できます。

    import numpy as np
    list_ex = [1, 0] # This a list
    list_int = np.array(list_ex) # This is a numpy integer array

整数配列を浮動配列に変換する場合は、それに0を追加します。

    list_float = np.array(list_ex) + 0. # This is a numpy floating array

1

これが私のやり方です。

my_list = ['0.49', '0.54', '0.54', '0.54', '0.54', '0.54', '0.55', '0.54', 
    '0.54', '0.54', '0.55', '0.55', '0.55', '0.54', '0.55', '0.55', '0.54', 
    '0.55', '0.55', '0.54']
print type(my_list[0]) # prints <type 'str'>
my_list = [float(i) for i in my_list]
print type(my_list[0]) # prints <type 'float'>

0
import numpy as np
my_list = ['0.49', '0.54', '0.54', '0.54', '0.54', '0.54', '0.55', '0.54', '0.54', '0.54', '0.55', '0.55', '0.55', '0.54', '0.55', '0.55', '0.54', 
'0.55', '0.55', '0.54']
print(type(my_list), type(my_list[0]))   
# <class 'list'> <class 'str'>

タイプを文字列のリストとして表示します。numpyを使用して、このリストを同時に浮動小数点数の配列に変換できます。

    my_list = np.array(my_list).astype(np.float)

    print(type(my_list), type(my_list[0]))  
    # <class 'numpy.ndarray'> <class 'numpy.float64'>

0

最初にフロート文字列のリストから数値を抽出する必要がありました:

   df4['sscore'] = df4['simscore'].str.findall('\d+\.\d+')

次に、それぞれを浮動小数点数に変換します。

   ad=[]
   for z in range(len(df4)):
      ad.append([float(i) for i in df4['sscore'][z]])

最後に、すべてのフロートをfloat64としてデータフレームに割り当てます。

   df4['fscore'] = np.array(ad,dtype=float)

0

私はプログラムでこの問題を解決しました:

number_input = float("{:.1f}".format(float(input())))
list.append(number_input)

1
OPは、彼がテキストファイルから読んでいると述べています。この答えは、尋ねられたことには適用されません。
Ilhicas

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.