5

テキストファイルから文字列を引き出すPythonコードがいくつかあります。

[2.467188005806714e-05, 0.18664554919828535, 0.5026880460053854, ....]

Pythonコード:

v = string[string.index('['):].split(',')
for elem in v:
    new_list.append(float(elem))

これによりエラーが発生します:

ValueError: could not convert string to float: [2.974717463860223e-06

なぜ[2.974717463860223e-06フロートに変換できないのですか?

4

5 に答える 5

16

[解析を妨げる「フロート」の前にまだあります。

そのために適切なモジュールを使用しないのはなぜですか? 例えば:

>>> a = "[2.467188005806714e-05, 0.18664554919828535, 0.5026880460053854]"
>>> import json
>>> b = json.loads(a)
>>> b
[2.467188005806714e-05, 0.18664554919828535, 0.5026880460053854]

また

>>> import ast
>>> b = ast.literal_eval(a)
>>> b
[2.467188005806714e-05, 0.18664554919828535, 0.5026880460053854]
于 2012-04-16T14:51:58.403 に答える
5

ファイルから読み取った文字列を float のリストに変換するには、次のようにします。

>>> instr="[2.467188005806714e-05, 0.18664554919828535, 0.5026880460053854]"
>>> [float(e) for e in instr.strip("[] \n").split(",")]
[2.467188005806714e-05, 0.18664554919828535, 0.5026880460053854]

コードが失敗する理由は、文字列から「[」を削除していないためです。

于 2012-04-16T14:52:41.793 に答える
3

最初のブラケットをキャプチャしています。次のように変更string.index("[")します。string.index("[") + 1

于 2012-04-16T14:50:41.320 に答える
1

これにより、追加のインポートなどを必要とせずにフロートのリストが得られます。

s = '[2.467188005806714e-05, 0.18664554919828535, 0.5026880460053854]'
s = s[1:-1]
float_list = [float(n) for n in s.split(',')]


[2.467188005806714e-05, 0.18664554919828535, 0.5026880460053854]
于 2012-04-16T14:58:03.107 に答える
0
v = string[string.index('[') + 1:].split(',')

index()'['によって返されるシーケンスに含まれるように、指定された文字のインデックスを返します[:]

于 2012-04-16T14:50:53.870 に答える