タプルのリストを表す文字列の解析
-
05-07-2019 - |
質問
このような文字列があります:
"(8, 12.25), (13, 15), (16.75, 18.5)"
そしてそれらのそれぞれをpythonデータ構造に変換したいと思います。浮動小数点値のペアを含むタプルのリスト(またはタプル)が望ましい。
タプルのタプルを与える eval("(8、12.25)、(13、15)、(16.75、18.5)")
でそれを行うことができますが、私は外部情報を単純に評価することは賢明な決定だとは思わない。
それで、エレガントなpythonicソリューションがどのように見えるかと思いました。
解決
>>> import ast
>>> print ast.literal_eval("(8, 12.25), (13, 15), (16.75, 18.5)")
((8, 12.25), (13, 15), (16.75, 18.5))
他のヒント
def parse(s):
tuples = s.split('), ')
out = []
for x in tuples:
a,b = x.strip('()').split(', ')
out.append((float(a),float(b)))
return out
これで仕事ができるはずです。
過去にこのような仕事に safe_eval を使用しました。
CSVファイルを使用していて、「単純な」以上のものが必要な場合エラーを処理しないソリューションでは、おそらく PythonのCSVモジュールを使用するのが最善です。 a>。
PyParsing をダウンロードします。
私は以前にそれを使ったことがあります。そこからかなり堅牢な解析動作を得ることができ、この種の解析ニーズ全体を処理するビルトインを提供すると思います。カンマ区切りリストとnestedExprを検索します。
体系的に行うことの何が問題になっていますか? ")"で分割し、リストを調べて、すべての"("。
を削除します。>>> s="(8, 12.25), (13, 15), (16.75, 18.5)"
>>> [ i.replace("(","") for i in s.split(")") ]
['8, 12.25', ', 13, 15', ', 16.75, 18.5', '']
>>> b = [ i.replace("(","") for i in s.split(")") ]
>>> for i in b:
... print i.strip(", ").replace(" ","").split(",")
...
['8', '12.25']
['13', '15']
['16.75', '18.5']
['']
各要素をデータ構造に取り込むことができます。
所属していません StackOverflow