【Python】リストから空白を削除しようとするとオブジェクトが返される
空白を削除しようとしてもオブジェクトが出力される
対象とするのは以下のようなリスト。 最初と最後の中身が空白のものを削除したい。
# ['', # 'ごま', # '原宿', # 'ごまアイス専門店GOMAYAKUKI', # '濃厚ごまスムージー', # '豆乳ベース', # 'まろやかな味わい', # '']
どうやらlambdaで出来るようなのでやってみるとオブジェクトが出力される。
text = filter(lambda a: a != '', text)) pprint(text) # <filter object at 0x10a8e0208>
解決策
上のは2系の場合の書き方だったらしい。 原因は以下。
Python2系では,上に挙げたそれぞれの関数、メソッドはそれぞれリストを返している。 しかし,Python3系ではリストではなく、iterator objectを返すように挙動が変更された。
引用: Python3におけるmap/filterの使い方 - どこかに向かうらしい話
イテレーターをlist関数に渡せば解決出来る。
text = list(filter(lambda a: a != '', text)) pprint(text) # ['ごま', # '原宿', # 'ごまアイス専門店GOMAYAKUKI', # '濃厚ごまスムージー', # '豆乳ベース', # 'まろやかな味わい']