Python

[Python] リストからNoneを削除する方法

2020-02-08

[Python] リストからNoneを削除する方法

Pythonの配列(リスト)からNoneを削除したい。

Pythonで複数のデータを処理するとリストにNoneが紛れ込むことがある

Noneは数値でも文字列でもないので処理が難しい。

今回はそんなNoneをリストから削除する方法を紹介する。

この記事を書いている人


システムエンジニア、AIエンジニアと、IT業界で10年以上働いている中堅。PythonとSQLが得意。

記事を読むメリット

PythonのリストからNoneを削除する方法がわかる


リストからNoneを削除する方法


リストからNoneを削除したい。

逆に言えばNone以外を取得したいということだ。

少し抽象化すると、リストの各要素に対して条件を使って条件に合う内容を取得する。

方法としては4つある。

listからNoneを削除する方法

  • filterを使う方法
  • filter + lambda を使う方法
  • リスト内包表記を使う方法
  • リスト内包表記で is not None を使う方法

  • では以下のリストを対象として順に見ていく。

    list_a = [0, 1, 2, 3, None, 5, 6, 7]
    print(list_a)
    # [0, 1, 2, 3, None, 5, 6, 7]
    


    filterを使う方法

    filterを使うにはfilter関数の引数に None対象のリスト をセットする。

    すると返り値として filterオブジェクトが返される。
    filterオブジェクトをlistに変換すると中身を見ることができる。

    list_a_filtered = filter(None, list_a)
    print(list_a_filtered)
    print(list(list_a_filtered))
    # <filter object at 0x0000025F40A48358>
    # [1, 2, 3, 5, 6, 7]
    



    結果を見ると 0None が削除されている。

    仕組みとしてはリストの中の0Noneをfilterが False として判定して除外している。


    filter + lambda を使う方法

    filterの第1引数の条件にlambdaをセットすると以下のようになる。

    list_a_filtered = filter(lambda a:a is not None, list_a)
    print(list(list_a_filtered))
    # [0, 1, 2, 3, 5, 6, 7]
    



    今回は None のみが削除されている。
    lambdaの判定式 is not None をリストの各要素に適用して、 True だった要素をリストとして返してくれている。


    リスト内包表記を使う方法

    リスト内包表記を使って条件抽出をすると以下のようになる。

    list_a_filtered = [x for x in list_a if x]
    print(list_a_filtered)
    # [1, 2, 3, 5, 6, 7]
    



    これもfilterのとき同様に 0 を条件に合致しない False として判定しているので 0 を含まないリストを返している。


    リスト内包表記で is not None を使う方法

    0は残したい場合はlambdaを使ったときのように is not None を判定条件として指定する。

    list_a_filtered = [x for x in list_a if x is not None]
    print(list_a_filtered)
    # [0, 1, 2, 3, 5, 6, 7]
    



    すると 0 は残して None だけ削除したリストを得ることができる。



    まとめ

    今回はPythonでリストからNoneを削除する方法について紹介した。

    方法は以下の通り。

    listからNoneを削除する方法

  • filterを使う方法
  • filter + lambda を使う方法
  • リスト内包表記を使う方法
  • リスト内包表記で is not None を使う方法
  • Pythonの配列(リスト)からNoneを削除したい場合は、filterもしくはリスト内包表記を使おう。

    Noneと0を区別して0を残したい場合は条件式に is not None を指定しよう。




    Pythonのコードが出来上がったら次は定期的に実行させる環境に移してコードを実行すると思う。

    ランニングコストをかけてネット上に実行環境を作るのもありだが、小型PCを購入してランニングコストを下げるのも1つの手かと思われる。

    小型PCの魅力とオススメの機種について書いた記事があるので、もしよければ参考にして欲しい。

    ITipsと同じようなブログを作る方法

    ブログに興味がありますか?

    もしブログに興味がある場合は↓このページ↓を参考にすれば、ITipsと同じ構成でブログを作ることができます

    サーバー、ドメイン、ASPと【ブログに必要なものは全て】このページに書きました。
    同じ構成でブログ作るのはいいけど、記事はマネしないでネ (TДT;)

    ランキング参加中

    にほんブログ村 IT技術ブログへ

    他にもブログやSNSで紹介してくれると励みになります。

    はてブのコメントで酷評されると泣きます(´;ω;`)

    -Python

    © 2024 ITips