どこかに向かうらしい話

迷走エンジニアの放浪記

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(' ')]

により生成可能。