【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',
#  '濃厚ごまスムージー',
#  '豆乳ベース',
#  'まろやかな味わい']

参考