Python3で文字列リストの変換をmapでしようとしたらハマった件について
したいこと
文字列
a1 = ['0', '12.2','23']
を
[0.0, 12.2, 23.0]
と、リストの要素を文字列からfloatへ変換して出力させたい。
Python2.X系だと、以下で求めたいListが出力される。
>>> a1_str = map(float,a)
しかし、Python3.4.3で実行するとmapオブジェクトが返される。
よって、以下のようにリスト化すればよい…とはいかない。1回イテレートすると消えてしまう仕様のため、2回目にイテレートすると空になってしまう。
>>> a1_list = list(a1_str)
>>> print(a1_list)
[]
それを回避する方法として、内包表記を用いて一発でリスト化する方法を用いる。
>>> a1_list = [float(i) for i in a1]
もうちょい
では逆は?
リストの要素をintから文字列に変換したいとする。
>>> a2 = [1, 2, 3]
>>> [str(i) for i in a2]
['1', '2', '3']
ちょっとした応用
以下の文字列
a3 = '10 20 30'
から、以下のint型のリスト
[10, 20, 30]
を生成したい。
これは、
[int(i) for i in a3.split(' ')]
により生成可能。